From 1829780f565aa82fa88573de9c76b878d1f28a0d Mon Sep 17 00:00:00 2001 From: tzlil Date: Sat, 16 Sep 2023 05:03:03 +0300 Subject: solved 2 logic puzzles --- puzz2.hs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 puzz2.hs (limited to 'puzz2.hs') 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 + -- cgit 1.4.1