@@ 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}]
+--
+
+