You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
-- 112 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)]
--