zeroFront :: [Int] -> [Int]
zeroFront nums = [x | x <- nums, x==0] ++ [x | x<- nums, x/=0]
has77 :: [Int] -> Bool
has77 [] = False
has77 (7:7:_) = True
has77 (7:_:7:_) = True
has77 (_:xs) = has77 xs
tripleUpH :: [Int] -> Bool
tripleUpH [a,b,c] = (b == a+1) && (c == b+1)
tripleUpH _ = False
-- This recursion relies on `take n` giving less than n elements on short lists.
tripleUp [] = False
tripleUp xs = tripleUpH (take 3 xs) || tripleUp (drop 1 xs)
check_zeroFront = [
zeroFront [1,0,0,1] == [0,0,1,1],
zeroFront [1] == [1],
zeroFront [0] == [0],
zeroFront [0,1] == [0,1],
zeroFront [1,0] == [0,1],
zeroFront [0,1,1] == [0,1,1],
zeroFront [1,1,0] == [0,1,1],
zeroFront [0,0,0] == [0,0,0],
zeroFront [0,1,0] == [0,0,1],
zeroFront [1,0,1] == [0,1,1],
zeroFront [1,0,1,0,1,0,1,1,1,0] == [0,0,0,0,1,1,1,1,1,1],
zeroFront [1,0,2,0,4,0,20,10,5,0] == [0,0,0,0,1,2,4,20,10,5]
]
check_has77 = [
has77 [] == False,
has77 [7] == False,
has77 [7,2] == False,
has77 [2,7] == False,
has77 [7,7] == True,
has77 [1,7,7] == True,
has77 [7,7,3] == True,
has77 [8,4,7] == False,
has77 [7,2,7] == True,
has77 [7,1,2,7] == False,
has77 [7,1,2,7,8] == False,
has77 [7,1,2,7,7] == True,
has77 [1,7,2,7,7,5] == True
]
check_tripleUp = [
tripleUp [1,2,3] == True,
tripleUp [3,2,1] == False,
tripleUp [1,2,3,5] == True,
tripleUp [5,1,2,3] == True,
tripleUp [5,6,1,2,3,7] == True,
tripleUp [5,4,3,4,5] == True,
tripleUp [5,4,3,4,6] == False,
tripleUp [1,2] == False
]