diff options
author | tzlil <tzlils@protonmail.com> | 2023-09-16 05:03:03 +0300 |
---|---|---|
committer | tzlil <tzlils@protonmail.com> | 2023-09-16 05:03:03 +0300 |
commit | 1829780f565aa82fa88573de9c76b878d1f28a0d (patch) | |
tree | b0f92dc26419031bddca3608d12bd983cd60153d /puzz2.hs |
solved 2 logic puzzles
Diffstat (limited to 'puzz2.hs')
-rw-r--r-- | puzz2.hs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/puzz2.hs b/puzz2.hs new file mode 100644 index 0000000..7d933a8 --- /dev/null +++ b/puzz2.hs @@ -0,0 +1,44 @@ +import Prelude +import Control.Monad +import Data.List + +data Customer = BetsyBeard | CoraCarey | DonnaDrake | EdwinEllis deriving (Eq,Show) +type Size = Integer +type Price = Integer + +-- triple pairing +data Tripling = Tripling { customer :: Customer, size :: Size, price :: Price } deriving (Show) + +customers = [BetsyBeard, CoraCarey, DonnaDrake, EdwinEllis] +prices = [550, 775, 1500, 2000] +sizes = [55, 60, 65, 70] + +-- each solution is 4 triples +type Solution = [Tripling] + +answers :: [Solution] +answers = do + -- spiders arent permutated so they will be in that order always, dont need to find them + solution@[betsy, cora, donna, edwin] <- [zipWith3 Tripling customers szs prs + | szs <- permutations sizes + , prs <- permutations prices] + + -- Clue 1 + Just twoThousand <- [find (\x -> price x == 2000) solution] + Just fiveFifty <- [find (\x -> price x == 550) solution] + guard (size twoThousand < size fiveFifty) + + -- Clue 2 + guard (price donna == 550) + + -- Clue 3 + Just fiftyFive <- [find (\x -> size x == 55) solution] + guard (price fiftyFive == 775 || price fiftyFive == 550) + + -- Clue 4 + guard (size cora == 70) + + -- Clue 5 + guard (size edwin + 5 == size betsy) + return solution + |