diff --git a/haskell/DayOne.hs b/haskell/DayOne.hs index e831bb5..0bb8a32 100644 --- a/haskell/DayOne.hs +++ b/haskell/DayOne.hs @@ -1,4 +1,5 @@ module DayOne where +import Control.Monad (guard) -- How many different ways can you find to write allEven? @@ -100,3 +101,45 @@ maplayouts = [(al, mi, ga, tn, fl) | -- [(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)] -- +-- Haskell Wiki: Logic programming +-- https://wiki.haskell.org/Logic_programming_example + + +data USMap = USMap { + alabama :: Color, + florida :: Color, + georgia :: Color, + mississippi :: Color, + tennessee :: Color +} deriving Show + +maplayouts2 :: [USMap] +maplayouts2 = do + al <- [Red, Blue, Green] + fl <- [Red, Blue, Green] + ga <- [Red, Blue, Green] + ms <- [Red, Blue, Green] + tn <- [Red, Blue, Green] + + guard $ ms /= tn + guard $ ms /= al + guard $ al /= tn + guard $ al /= ms + guard $ al /= ga + guard $ al /= fl + guard $ ga /= fl + guard $ ga /= tn + + return $ USMap { + alabama = al, + florida = fl, + georgia = ga, + mississippi = ms, + tennessee = tn + } + +-- >>> maplayouts2 +-- [USMap {alabama = Red, florida = Blue, georgia = Green, mississippi = Green, tennessee = Blue},USMap {alabama = Red, florida = Green, georgia = Blue, mississippi = Blue, tennessee = Green},USMap {alabama = Blue, florida = Red, georgia = Green, mississippi = Green, tennessee = Red},USMap {alabama = Blue, florida = Green, georgia = Red, mississippi = Red, tennessee = Green},USMap {alabama = Green, florida = Red, georgia = Blue, mississippi = Blue, tennessee = Red},USMap {alabama = Green, florida = Blue, georgia = Red, mississippi = Red, tennessee = Blue}] +-- + +