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
  ]
Last modified September 27, 2023: Quiz packaged with solution. (f218326)