diff --git a/day2.hs b/day2.hs new file mode 100644 index 0000000..2b8a677 --- /dev/null +++ b/day2.hs @@ -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 diff --git a/day2.in b/day2.in new file mode 100644 index 0000000..6db9d93 --- /dev/null +++ b/day2.in @@ -0,0 +1,2500 @@ +C X +B Y +C Z +C Z +B X +C Z +C Z +C Z +B X +B Y +B Z +B Z +B Z +C X +C Y +B Y +C Z +C Y +C X +B Y +C Y +C Z +A Y +B Y +C X +C X +C Y +B Y +B X +C Z +B Y +B Z +C Y +A X +B Y +B X +B Y +B X +C Z +B Y +C Y +A Z +B Y +C Z +A Z +B Y +B Y +B Y +C Y +B Y +A X +C Z +C X +C Z +A Y +C X +C Z +C Y +C Y +A Y +C Z +B Y +B Z +A X +C Z +B Y +C X +B X +C Z +C Z +B Y +C Z +A Z +C X +C Y +B X +C X +C Z +B Z +B Z +B Z +B Y +A X +B Y +C Y +B Z +B Y +C Y +C X +B Z +C X +B Y +A Y +B X +C Z +A Z +C Y +C Y +A Z +B Z +B Z +C Z +B X +B X +C Y +C Z +B X +B X +A Z +C X +C Z +A Y +B Z +B Y +B Y +C Z +C X +B Z +A X +B Y +B Z +B Z +A Z +A Y +B X +B Y +A X +C Y +B Y +B Y +B Y +B Y +B X +C Z +C Z +C Z +C Z +B Z +C Z +A X +C Z +C X +B Z +C X +A Z +A Y +B Z +A Y +A X +B Y +A Z +C Z +C Z +B X +C Z +A Y +C Z +B Y +C Z +C X +A Z +B Y +B Y +C X +A Z +C Z +B X +B Y +C X +B X +B X +B Z +B Y +A Z +C Z +B X +B Y +B Z +B Z +C Z +C Z +C Y +A Z +A Z +C Y +B Y +B Y +B Y +B Y +B Z +C X +B Y +A Y +C X +A Z +A Z +A Z +C X +B Y +B Z +B Z +C Z +B Z +C X +A X +A Z +B Z +C X +C Z +C Y +C Z +B Y +B X +C Z +A Y +B X +A X +B Z +C Y +B Y +B Y +B Y +B X +B Y +C X +C Z +B Y +C X +C Z +C X +C Z +B Z +B Z +B Z +A X +B Y +C Z +C Z +B Y +C X +A X +A Z +B Z +B X +C X +A X +B Y +B Y +C Y +B Z +B X +A Z +C Y +B Y +C X +B Y +C X +B Z +A X +A Y +C X +A X +C Y +B Y +B Y +A Y +C Z +B Y +C X +B Y +C X +C Z +C X +C Z +C Y +B Z +B Z +A Z +C X +B X +C Z +C Y +B Y +B Z +B Z +B Y +C Z +B Z +B X +C Z +C Z +C Z +B Y +C X +C Y +B Z +B Y +A Y +C X +B Z +A Z +B Y +B Y +C X +C Y +C Z +C X +C X +C X +C Z +A Z +A Z +C X +C Z +C Y +C Y +C Z +C Z +C Z +C X +B X +B Y +B X +C Y +C Y +B Y +C Z +C X +B Y +C X +B Z +B Y +B Z +B X +B X +C X +C Z +C X +C X +C Z +C Z +B Y +C X +B Y +C Y +C Z +B Z +B Y +C X +C X +A X +C Z +C Y +B Z +B Z +B Y +C Z +C Z +B Y +B Z +A Y +C X +A Z +C Y +C X +B Y +A X +A Z +C X +C Z +B Y +B Y +A Y +A Z +A Y +C Z +A Z +A Z +C Z +B Y +C X +C X +B Y +C X +B Z +B Y +C Y +B Y +B Y +B Y +A Y +C Z +B Y +C X +C Z +C X +B Y +B Y +C Z +B Y +C Z +C Z +B Y +B Y +C X +C Z +C X +A Y +A Y +B Z +C Z +B Y +C X +B Y +C X +C Y +C X +A Y +C Y +B Y +B Z +C Z +A Z +B X +C Z +B Z +B X +A Y +C Z +A Y +B Y +A Z +B Y +C X +B X +C Z +B Z +C Z +B Y +C X +B Z +B Y +A Z +B Y +C Z +C X +C Z +A Y +A Z +B X +A Z +B Y +B Y +B Y +C Z +C X +B Z +C Z +A X +C Z +C X +B X +A Z +C Y +A Z +B Y +C Y +A Y +C X +A Z +C Z +A Z +B Z +C Z +A Y +C Z +C Y +B Y +B Y +B Y +C X +B Z +B Y +C X +C Y +C Z +C Z +B X +C X +B Y +A Y +B Y +C Z +B X +A Z +B Z +C Z +C X +C Z +B X +B Y +C Y +B Z +B Y +C Z +C Z +B X +C Z +A Y +B Z +B Y +B Y +B Z +B Z +B Y +B Y +B X +B Y +A Z +B Y +C X +B Z +A Y +B Z +C Z +C Z +B Y +B Z +B Y +C X +C Y +C Y +C Y +C Z +C X +C X +C Z +A Z +C Z +B Y +B Y +A Z +C Z +B Y +B Y +C X +C Y +B Y +A Y +C Z +C X +C Z +B Y +C Z +C X +B X +B X +C X +C X +C X +B Z +A Z +B Y +C Z +B Y +B Z +B Y +C Y +A Z +B Z +B Y +C Y +C X +B Y +C Y +C Z +C Y +B Y +C Z +C Z +B Z +C X +C Y +C X +C X +C Z +C X +C Z +C Y +A Y +A Z +C Z +C X +B Y +B Y +C X +C Z +A Y +B Z +B Y +C Z +C X +B X +B Y +B Z +B Z +B Y +A Y +C X +C Z +C X +A Z +A Y +C X +A X +C Y +A X +B Y +C Z +A Y +C X +C Z +B Y +B Y +B Z +B Y +B X +B X +C X +A Z +B Z +A Z +A Z +A X +B Y +C X +C Z +C Z +B Y +C X +C X +A X +A Z +B X +C Z +C Z +B Y +C X +B Z +B Z +A Y +B Y +C X +B Y +B Y +B X +C Z +A Y +C X +B Y +C Z +B X +A Z +A Z +B X +B Y +C X +B Z +A Y +C Z +C Z +B Y +B X +A Z +B Z +B Y +A Y +A Z +B Y +B X +B Z +B Z +A Z +A X +A Y +A Y +B X +C X +C Y +B X +A X +B Z +B Y +C Z +B Y +C Z +C Y +C X +A Y +B Z +A Z +B X +B X +B Y +C X +B X +A Y +C X +C Y +B Y +B Z +C Z +A Y +A X +C Z +C Z +C X +A Z +C X +A Y +B Z +B Y +C X +B X +A Y +B Z +C X +B Y +C X +B X +A Z +B Y +C Y +C X +C X +C Z +A Z +C Y +B Y +C Z +C Z +B Y +C Z +C Y +B Y +C X +C X +B Y +B X +A Y +C Z +B Y +A Z +C X +C Y +B Y +B Y +B Y +A Z +A Y +B X +B Y +B Y +B Z +B X +C Z +B Y +C X +C Z +C X +C Y +B Y +C Y +A Z +B Y +C Y +B Y +B Y +A Y +C Z +C Y +C Y +A X +C Z +C Z +C Z +A Y +B Y +C Z +B Z +A Z +B Z +C X +C Z +C Z +A X +C Y +C Z +C Y +C Y +C X +C Y +C X +A Z +C X +C X +B X +C Z +B Y +C Z +B Y +B X +C Z +B Y +C Y +C Z +C X +A X +C Z +A Y +C Y +B Y +B Z +B Z +B Z +B Y +B X +B Y +C Z +B X +B X +B Y +C Y +C Z +A Z +C Y +B Y +B Z +C X +C X +B Z +B Y +C X +C Z +C Z +C X +C Y +B Y +C Y +C Z +C Z +B Z +C Z +B X +B Z +A Z +A Z +C Z +C Y +C Z +C X +B Y +B Y +C Z +B Y +B Y +A Z +A Y +B Z +C Z +C X +B Y +C X +C Z +B Z +C X +C Y +B X +C Z +C Y +A Z +C Z +C Z +C Z +C Z +C Z +A Z +B Y +A Z +A Z +A Z +C X +B Z +B Z +B Y +A Y +C Z +C X +B Z +A Y +B Y +C X +C Z +B Z +C Y +A Y +C Z +B Z +B Z +B Z +C Z +C Z +C Z +C Y +A Y +A Z +A Y +C X +C Y +C Z +C X +B Y +B Z +C Z +B Y +C X +A X +C X +B Y +B Y +B Y +C Z +C Z +A X +B Y +B Y +B Z +B X +C Z +B Y +C X +B X +C Z +C Z +B Y +C Z +C Y +C Z +C Y +C Y +A Z +C Z +B Y +A Y +A Y +B Y +C Y +B X +A Y +C X +C Y +B X +C X +C X +C Z +C X +C Z +B Y +C X +B X +C Y +C Z +C Z +B Z +C X +B Y +A Z +C Y +B X +B Y +B Y +B Y +C Z +C Y +A Z +C X +B Z +C Y +C Y +C X +C Z +A Z +B X +A Z +C Z +B Z +B Y +A Z +C Z +B Z +A X +B Y +B Y +C Z +C Y +C Z +C X +B Y +C X +B Y +A X +B X +C Y +B Y +A Y +B Y +C Z +C X +B Y +C Z +C Y +C X +C X +B X +B Y +C X +A X +B X +B Z +A Z +B Z +C Y +B Z +B Y +C Z +C Y +B Y +B Y +C X +B Y +C Z +B Y +C X +B X +C Z +C Z +B Y +C Z +B Y +B Y +A Y +B Y +B Y +C Z +B Z +C X +B X +C X +B Y +B Y +C Z +C Z +C Z +C X +C Z +A Z +C X +B Y +B X +B Y +B Z +C X +A Y +A Y +C Z +C X +C Y +C X +C X +C Z +A Y +C X +B Y +C Z +C X +B Y +A Z +B X +C Z +A Z +C X +B X +A Y +A Y +B Y +B X +B X +B X +C Y +A X +A Z +B Y +B Z +B Z +C Y +C X +A Z +C Z +B Z +C X +C Y +A Z +C Z +C X +C X +B Y +B Y +C Z +A Y +C Z +B Y +B Y +C Z +C Z +C Z +C Z +C Z +B Y +A Z +C X +B Y +C Z +B X +B Z +C Y +C Z +C Z +A X +C Z +A X +C X +C Z +A X +C Z +C Z +A Z +C X +C X +C Y +C Z +A X +C X +B Y +A Z +A Z +C X +B Y +A X +C Z +B Y +A Y +A Z +C X +B Y +B Z +C Y +B Y +B X +B X +B Y +B X +A X +B Y +C X +B Y +C Z +B X +C Y +B Z +B X +B Y +C X +B Z +B X +A X +C X +B Y +B Y +C Y +B Y +C X +C Z +C X +C X +B Z +C Z +C Y +A Z +C Z +C Y +C X +A Z +B Y +B Y +B Z +B X +A Y +B Y +C Z +B Y +B Z +A X +C X +C X +B X +A Z +B Z +B X +B Y +C Z +B Y +B Z +B Y +C Y +A Y +C Y +C Z +B Z +A Y +B Y +C Z +B Z +A Z +C X +C Z +B Y +C Z +A Z +C Z +C Y +C Z +A X +B Y +B Y +B Y +A Z +A Y +B Z +C Z +A Z +B Y +B Y +B Y +C X +A Z +A Z +A Z +C X +C Z +A Z +C Y +B Y +C Z +C X +B Y +A Y +C Z +C Z +C Z +A Z +A X +B Y +B X +C Y +B X +B Z +C X +A Z +B Z +B Y +A X +A Z +A Y +C X +C Z +C X +C Z +A Z +B Z +B Z +B Z +C Z +C Y +A Z +A Z +A Y +B Y +C Z +B Z +A Z +C Z +A X +B Y +B Y +C X +C Z +B Z +B Y +B X +C Z +B Z +A X +B Z +C Z +B Y +A X +C Y +C X +C X +B Y +C Z +B X +A Z +B Y +C Z +B Y +C Z +A Y +B Z +C X +C X +B Y +C Y +B X +C Z +C Z +B Y +B Y +A Z +A Y +C Y +A Z +C Z +A Y +A Z +C X +C Y +B Z +C X +B X +C X +C X +B X +B X +B Z +C X +C X +B Y +A Z +C X +B Y +B Y +C Y +B Y +C Z +C Y +A Z +A X +C Z +C X +B Z +B X +B Y +A X +C Y +B Y +B Z +B Y +C Z +C Z +A Y +C Y +C X +A X +C Y +C Z +B Z +B Y +C Z +C X +C Y +B Z +B Z +C X +C Z +C X +B Y +A Z +B Y +B Y +C Z +B X +C X +C Y +A Z +C Z +B Y +C Y +B Y +C Y +A X +C X +B X +C X +C Y +C Z +B Y +B X +B Y +C Z +C Y +B Z +C X +B Y +B Y +C Z +C Z +C Z +C X +B Y +C X +C Z +C X +C X +C Y +B Y +C Z +C Z +B Y +B Y +B Y +B Z +C Y +A Z +C X +C Z +A Y +C X +C Z +C Y +B Y +A X +C Z +B Y +B X +B Z +A Y +A Z +C X +C Z +C Y +B X +C Z +A Y +B X +A Z +B Y +A Z +C Z +B Y +C X +A Z +B Y +C Z +C Z +C Y +B Z +C X +C X +B Y +B Y +C Z +C Z +B X +C Z +A Y +B Y +C Z +B X +A Z +C Z +B X +C X +B X +C Y +C Y +A Z +B Y +C X +C Z +A Z +C Z +B X +B Z +C X +C Y +C Z +A Y +C Y +B Z +C X +B Z +C X +B Z +B Y +B Z +A Y +B Y +A Y +B Y +A Z +C Y +C Z +C Z +A X +C Z +B X +A Z +B Y +C Z +A Y +C Z +B Y +B X +C Z +C Z +B Y +C X +B X +A Z +C Y +C Z +B Y +B Y +C X +B Y +B Y +B Z +A Y +C X +B X +B Y +B Y +A Z +C X +C Y +A Y +B Y +C Z +B Y +C Z +B Y +C X +B Z +B Z +A X +A Z +B Y +B X +A X +B Y +B Y +C X +C Z +B Y +C X +C Y +C Z +B Y +A Z +B Y +A Z +B Z +C X +A Z +B Y +B Y +C Z +A Z +A Z +B Y +B Z +C Z +B X +C Z +C Z +B X +B Z +C X +B Z +C X +B Y +B Y +A Y +C Z +B Y +C Z +C Z +C Y +C X +A Z +B Y +C Z +C Z +B X +C X +C Z +B Z +A Z +C X +C Z +A Z +B Y +B Y +C Z +A X +A Z +C Z +C Z +B Y +C X +B Y +B Y +C Y +A Y +C Z +A Z +B Z +A Z +B Y +C X +C Z +B Y +C Z +B Y +C Z +C Z +B Z +B X +A Z +B Z +B Z +C X +C X +A Z +B X +B Z +B Y +C Z +C X +B Z +B Z +C Z +B Y +B Y +C X +B X +C X +C Z +B Y +A Z +B Z +B Y +B Z +B X +C Z +C Y +C Z +A X +C Z +A Y +C Y +A Z +C Z +B X +A X +B Y +A Z +A Y +B Z +B Y +B X +C Y +C Y +B Z +A X +C X +B Y +C Z +B Y +B Y +B X +A X +C Z +B Y +B Y +B Z +C X +C X +B Y +C Z +C X +C Z +C Y +B Y +A Z +C Y +A Y +C Z +C X +C Z +C Z +B Y +B Y +B Z +B X +A Z +B X +A Z +C Z +C Y +B X +B Y +C Z +A Y +B Y +B Z +A Y +B Z +B Z +A Y +A X +B Y +A Z +B Z +A Z +B Z +C X +C Y +B Y +B X +B Y +C Y +C Y +B X +B X +A Z +A Y +A X +A Z +B Y +B Y +C X +C Z +C X +C X +B Z +A Y +C Z +C X +A Y +A X +A Z +C Y +B X +A X +A Z +C Z +B Y +C X +C Z +B Z +B Y +C X +C X +C Z +A Y +C X +B Y +A X +A Y +C X +C X +A Z +C Y +B Y +A Y +C Y +A Z +B Y +B X +C Z +C X +B Y +A Y +C X +B Y +B X +C X +B Y +A Z +B Y +C X +C Z +A Y +C X +A X +C Y +C Z +C Z +C Z +B Z +B X +C Z +B Y +B Z +C Z +A X +C Z +B Y +B Y +C Y +A Z +A X +C X +B Z +C Z +A Y +C X +C Z +B X +A Z +C Y +A Y +C Z +A Z +B X +C X +C Z +C X +B Z +B Y +C X +B Y +C X +B Y +C X +B X +A Z +B Z +C Z +C X +C Y +A Z +C X +A Z +B Z +B Z +B X +B Y +B Z +C Z +C Y +C Z +B Z +B Y +C X +C Z +C Y +C Z +A Y +A Y +C Y +A Y +B Y +C Z +A Y +C X +B Z +A Y +B Y +C X +C X +B Y +C X +B Y +C Z +C X +A Y +C Z +A Z +B Y +B Z +C Z +C Z +C Y +B Y +C Y +C Z +B Y +C Z +B X +A Z +A X +B X +C Z +B Y +B Y +B Y +C Y +C Z +A Y +A Z +B Y +C Y +C Z +C Z +C X +C Z +C X +C Z +C Z +C Y +C X +B Z +C Z +C Z +C Z +C X +B Y +C Z +A Y +C Z +C X +C Y +C X +C Y +B Y +C Z +B X +A Z +C Y +C Z +B X +C Z +A X +B Y +A Y +C Z +B Y +C Z +C Z +B Z +C X +B Y +C Z +A Y +B Z +B X +C X +A Z +C Z +B Y +C Z +C Z +B X +B Y +C Y +C X +C Z +A X +B Z +C Y +C Y +B Y +B Y +B X +B Y +B Z +B Y +C Z +B Y +A Z +B X +B Z +B Y +B X +A X +C Z +B Z +A Z +A Z +A Z +A Z +B Y +C Y +C Y +A Y +C Z +B Y +B Y +B Y +C Z +C Z +C Y +C X +B Z +C Y +C X +C Z +B X +A Z +C X +A X +C X +C X +A X +C Z +B Y +C X +C Y +B X +B Y +C Z +C X +B Y +B Z +B Z +B Y +C X +C X +B Y +B X +C Z +A Z +C Z +B Z +B Y +B X +C Z +C Z +B X +B Y +C Z +B Y +B Y +A Y +C X +C Y +B Y +C Z +B X +B Y +C Z +C Y +C Y +B Y +B Y +A X +A Z +A Z +B Y +B Y +B Y +C X +B X +C Z +C Z +B Z +B Y +C Y +C Z +C X +C Z +C Y +A X +C Z +B Y +B Y +B Y +B X +C Z +B Y +B Y +A Y +C Z +A Z +B Y +B Y +A Z +A Z +A Y +C Z +A X +B X +B Z +C X +A Y +A Z +B Y +B Y +A Y +A Z +C Z +B Y +B Y +C Z +A X +A Z +A Z +C X +B Y +C X +B Z +B Y +C Y +B Y +C Z +B Y +C Z +B Y +C Y +C Z +A Y +A X +A X +C X +B Y +A X +C X +C Y +C Z +C Y +C Z +A Z +B Y +C X +C X +C Y +C Z +B Y +C Z +C Y +B Y +B Y +A X +C X +C X +B Z +A Z +C X +B Y +C X +A X +C Z +B Y +C Y +C Z +C X +A X +B Z +A Y +C Z +C Y +B X +B Y +C Z +B Z +C Z +C X +B Y +C X +B Z +B Y +A Z +A Y +C X +A Y +C Z +C Z +A Z +C Y +C X +A Z +B Y +C X +A Y +A Z +B Y +C Z +A Y +C X +C X +C Z +C Z +C Z +B Z +B Y +A Y +B Y +C Z +C X +B X +A Z +C Z +C Z +C Z +C X +A Y +A Z +A Z +B Z +B X +C X +B Y +C X +C Y +C Z +A Z +C X +C Y +B Y +B X +C X +B Y +C Y +B Y +B Y +C Z +C Y +C Y +B Y +A Y +B X +A Y +B X +C Z +B X +C Z +C Y +B Y +A Z +C X +B Z +C X +C X +C X +C Z +A Z +A Z +B Y +A Z +C Z +C Y +B Z +A X +A Z +C X +B Y +C X +C Z +C Z +A Z +C Z +C Y +B Z +B Z +C Y +B Y +C X +B Y +B Z +C Z +B X +C Z +B Z +B Y +B Y +C Y +C Z +C X +B Y +C X +C X +B Z +B X +C X +B X +C Z +C Z +B Y +A Y +C X +B Z +C X +C Y +C Z +C X +A Z +C X +B Y +B Y +A Y +C Z +B Z +B Y +C Y +C Y +A Y +B Y +B Y +B Y +C Z +C Z +A Z +B Y +C X +C Y +B Y +B Z +B Y +B Y +C X +C Z +C Z +A X +B Y +C Z +C Z +C Z +B Y +C Y +B Z +C Z +C X +C X +C Y +B X +C Z +B Y +C Y +B Z +A Y +B Y +B Z +A Z +C Z +C X +C Z +B Y +C Y +B Y +B Y +A Z +B Y +B Y +B Y +C X +C X +B Y +C Z +C Z +B Y +C X +C Z +C X +A Y +C Z +C Z +B Y +A X +C X +B X +A Y +C X +A X +B Y +A Z +C Y +C Y +C Z +C X +B Y +C X +C Z +B Y +C Z +C X +C Z +C Z +A Z +A Z +C Z +A X +C Z +C Z +B X +C Z +B Y +C X +A Z +C Z +C X +B Z +C Z +B Y +A Z +C Y +B X +B Z +A Y +B Y +C X +C Y +C Z +C Y +A X +C Z +C Z +C X +B Y +C Z +B Z +B Y +C X +C Z +C Y +B Y +C Y +B Y +A Y +B X +C Z +C Z +C Z +C X +B Z +C X +A Z +C Y +C Z +C X +C Z +A Z +A Y +B X +C X +C Z +B Z +B X +C Y +B Y +B Z +C X +C Z +C X +B Y +B Y +C X +B X +C X +C X +B Y +B Y +A Y +B Z +C Z +A Z +B Z +A Z +B Y +C Z +C Z +A Z +B Y +B Y +B X +C X +A Z +C Y +C Z +A Y +C Z +C Z +B Z +B Z +A X +A X +C Y +B X