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 /puzz1.hs |
solved 2 logic puzzles
Diffstat (limited to 'puzz1.hs')
-rw-r--r-- | puzz1.hs | 45 |
1 files changed, 45 insertions, 0 deletions
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 + |