summary refs log tree commit diff
path: root/puzz1.hs
diff options
context:
space:
mode:
authortzlil <tzlils@protonmail.com>2023-09-16 05:03:03 +0300
committertzlil <tzlils@protonmail.com>2023-09-16 05:03:03 +0300
commit1829780f565aa82fa88573de9c76b878d1f28a0d (patch)
treeb0f92dc26419031bddca3608d12bd983cd60153d /puzz1.hs
solved 2 logic puzzles
Diffstat (limited to 'puzz1.hs')
-rw-r--r--puzz1.hs45
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
+