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 --- puzz1.hs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 puzz1.hs (limited to 'puzz1.hs') diff --git a/puzz1.hs b/puzz1.hs new file mode 100644 index 0000000..df54886 --- /dev/null +++ b/puzz1.hs @@ -0,0 +1,45 @@ +import Prelude +import Control.Monad +import Data.List + +data Spider = Darkback | RaftSpider | WhipSpider | WolfSpider deriving (Eq,Show) +data Winner = Anthony | Georgia | Olga | Rafael deriving (Eq,Show) +type Price = Integer + +-- triple pairing +data Tripling = Tripling { spider :: Spider, winner :: Winner, price :: Price } deriving (Show) + +spiders = [Darkback, RaftSpider, WhipSpider, WolfSpider] +winners = [Anthony, Georgia, Olga, Rafael] +prices = [45, 60, 75, 90] + +-- 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@[darkback, raft, whip, _] <- [zipWith3 Tripling spiders wns prs + | wns <- permutations winners + , prs <- permutations prices] + + -- clue 1 + Just georgia <- [find (\x -> winner x == Georgia) solution] + guard (price raft == ((price georgia) - 15)) + + -- clue 2 + Just anthony <- [find (\x -> winner x == Anthony) solution] + guard (price darkback < price anthony) + + -- clue 3 + guard (spider anthony == RaftSpider) + + -- clue 4 + Just olga <- [find (\x -> winner x == Olga) solution] + guard (spider olga == WhipSpider || price olga == 90) + + -- clue 5 + guard ((price whip + 15) == price darkback) + + return solution + -- cgit 1.4.1