module DayOne where -- How many different ways can you find to write allEven? allEven :: [Integer] -> [Integer] allEven [] = [] allEven (h:t) = if even h then h:allEven t else allEven t -- >>> allEven [1, 2, 3, 4, 5, 6] -- [2,4,6] -- allEven2 :: [Integer] -> [Integer] allEven2 xs = [x | x <- xs, even x] -- >>> allEven2 [1, 2, 3, 4, 5, 6] -- [2,4,6] -- allEven3 :: [Integer] -> [Integer] allEven3 = filter even -- >>> allEven3 [1, 2, 3, 4, 5, 6] -- [2,4,6] -- -- Write a function that takes a list and returns the same list in reverse. backwards :: [a] -> [a] backwards = reverse -- >>> backwards [1, 2, 3, 4] -- [4,3,2,1] -- backwards2 :: [a] -> [a] backwards2 [] = [] backwards2 (x:xs) = backwards2 xs ++ [x] -- >>> backwards2 [1, 2, 3, 4] -- [4,3,2,1] -- -- Write a function that builds two-tuples with all possible combinations of -- two of the colors black, white, blue, yellow, and red. Note that you should -- include only one of(black, blue)and(blue, black). data Color = Black | White | Blue | Yellow | Red | Green deriving (Enum, Ord, Eq, Show) -- https://stackoverflow.com/questions/4299319/getting-a-list-of-all-possible-data-type-values-in-haskell allColors :: (Enum a) => [a] allColors = [toEnum 0 ..] pairs :: [(Color, Color)] pairs = [(a, b) | a <- allColors, b <- allColors, a < b] -- >>> pairs -- [(Black,White),(Black,Blue),(Black,Yellow),(Black,Red),(White,Blue),(White,Yellow),(White,Red),(Blue,Yellow),(Blue,Red),(Yellow,Red)] -- -- Write a list comprehension to build a childhood multiplication table. The -- table would be a list of three-tuples where the first two are integers from -- 1–12 and the third is the product of the first two. multiples :: [(Int, Int, Int)] multiples = [(a, b, a * b) | a <- [0..12], b <- [0..12]] -- >>> multiples -- [(0,0,0),(0,1,0),(0,2,0),(0,3,0),(0,4,0),(0,5,0),(0,6,0),(0,7,0),(0,8,0),(0,9,0),(0,10,0),(0,11,0),(0,12,0),(1,0,0),(1,1,1),(1,2,2),(1,3,3),(1,4,4),(1,5,5),(1,6,6),(1,7,7),(1,8,8),(1,9,9),(1,10,10),(1,11,11),(1,12,12),(2,0,0),(2,1,2),(2,2,4),(2,3,6),(2,4,8),(2,5,10),(2,6,12),(2,7,14),(2,8,16),(2,9,18),(2,10,20),(2,11,22),(2,12,24),(3,0,0),(3,1,3),(3,2,6),(3,3,9),(3,4,12),(3,5,15),(3,6,18),(3,7,21),(3,8,24),(3,9,27),(3,10,30),(3,11,33),(3,12,36),(4,0,0),(4,1,4),(4,2,8),(4,3,12),(4,4,16),(4,5,20),(4,6,24),(4,7,28),(4,8,32),(4,9,36),(4,10,40),(4,11,44),(4,12,48),(5,0,0),(5,1,5),(5,2,10),(5,3,15),(5,4,20),(5,5,25),(5,6,30),(5,7,35),(5,8,40),(5,9,45),(5,10,50),(5,11,55),(5,12,60),(6,0,0),(6,1,6),(6,2,12),(6,3,18),(6,4,24),(6,5,30),(6,6,36),(6,7,42),(6,8,48),(6,9,54),(6,10,60),(6,11,66),(6,12,72),(7,0,0),(7,1,7),(7,2,14),(7,3,21),(7,4,28),(7,5,35),(7,6,42),(7,7,49),(7,8,56),(7,9,63),(7,10,70),(7,11,77),(7,12,84),(8,0,0),(8,1,8),(8,2,16),(8,3,24),(8,4,32),(8,5,40),(8,6,48),(8,7,56),(8,8,64),(8,9,72),(8,10,80),(8,11,88),(8,12,96),(9,0,0),(9,1,9),(9,2,18),(9,3,27),(9,4,36),(9,5,45),(9,6,54),(9,7,63),(9,8,72),(9,9,81),(9,10,90),(9,11,99),(9,12,108),(10,0,0),(10,1,10),(10,2,20),(10,3,30),(10,4,40),(10,5,50),(10,6,60),(10,7,70),(10,8,80),(10,9,90),(10,10,100),(10,11,110),(10,12,120),(11,0,0),(11,1,11),(11,2,22),(11,3,33),(11,4,44),(11,5,55),(11,6,66),(11,7,77),(11,8,88),(11,9,99),(11,10,110),(11,11,121),(11,12,132),(12,0,0),(12,1,12),(12,2,24),(12,3,36),(12,4,48),(12,5,60),(12,6,72),(12,7,84),(12,8,96),(12,9,108),(12,10,120),(12,11,132),(12,12,144)] -- coloring (al, mi, ga, tn, fl) = mi /= tn && mi /= al && al /= tn && al /= mi && al /= ga && al /= fl && ga /= fl && ga /= tn mapcolors = [Red, Green, Blue] maplayouts = [(al, mi, ga, tn, fl) | al <- mapcolors, mi <- mapcolors, ga <- mapcolors, tn <- mapcolors, fl <- mapcolors, coloring (al, mi, ga, tn, fl)] -- >>> maplayouts -- [(Red,Green,Green,Blue,Blue),(Red,Blue,Blue,Green,Green),(Green,Red,Red,Blue,Blue),(Green,Blue,Blue,Red,Red),(Blue,Red,Red,Green,Green),(Blue,Green,Green,Red,Red)] --