57
day2.hs
Normal file
57
day2.hs
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
import Lib (split)
|
||||||
|
|
||||||
|
-- we do not use a simple 9 value case cuz yeah
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = do
|
||||||
|
input <- readFile "day2.in"
|
||||||
|
putStr "Q1: "
|
||||||
|
print $ q1 input
|
||||||
|
putStr "Q2: "
|
||||||
|
print $ q2 input
|
||||||
|
|
||||||
|
data Choice = Rock | Paper | Scissors deriving (Enum, Eq)
|
||||||
|
|
||||||
|
q1 :: String -> Int
|
||||||
|
q1 =
|
||||||
|
sum
|
||||||
|
. map
|
||||||
|
( \[x, _, y] ->
|
||||||
|
let i = val x 'A'
|
||||||
|
j = val y 'X'
|
||||||
|
in fromEnum j + 1 + case () of
|
||||||
|
_
|
||||||
|
| i == j -> 3
|
||||||
|
| winCond i == j -> 6
|
||||||
|
| otherwise -> 0
|
||||||
|
)
|
||||||
|
. lines
|
||||||
|
|
||||||
|
q2 :: String -> Int
|
||||||
|
q2 =
|
||||||
|
sum
|
||||||
|
. map
|
||||||
|
( \[x, _, y] ->
|
||||||
|
let i = val x 'A'
|
||||||
|
j = val y 'X'
|
||||||
|
in 1 + case fromEnum j of
|
||||||
|
0 -> 0 + fromEnum (loseCond i)
|
||||||
|
1 -> 3 + fromEnum i
|
||||||
|
2 -> 6 + fromEnum (winCond i)
|
||||||
|
)
|
||||||
|
. lines
|
||||||
|
|
||||||
|
val :: Char -> Char -> Choice
|
||||||
|
val a b = toEnum (fromEnum a - fromEnum b) :: Choice
|
||||||
|
|
||||||
|
winCond :: Choice -> Choice
|
||||||
|
winCond c = case c of
|
||||||
|
Rock -> Paper
|
||||||
|
Paper -> Scissors
|
||||||
|
Scissors -> Rock
|
||||||
|
|
||||||
|
loseCond :: Choice -> Choice
|
||||||
|
loseCond c = case c of
|
||||||
|
Paper -> Rock
|
||||||
|
Scissors -> Paper
|
||||||
|
Rock -> Scissors
|
Reference in New Issue
Block a user