diff --git a/AOC22.cabal b/AOC22.cabal index 29eea3b..22e99d3 100644 --- a/AOC22.cabal +++ b/AOC22.cabal @@ -1,6 +1,6 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.2. +-- This file has been generated from package.yaml by hpack version 0.35.0. -- -- see: https://github.com/sol/hpack @@ -28,6 +28,7 @@ executable AOC22-exe other-modules: AOCUtil Days.Day01 + Days.Day02 Paths_AOC22 hs-source-dirs: src diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/data/day02.txt b/data/day02.txt new file mode 100644 index 0000000..3914035 --- /dev/null +++ b/data/day02.txt @@ -0,0 +1,2500 @@ +A Z +A Y +B X +B X +C X +B X +A X +A X +C X +A X +A X +A Y +B X +A Y +C X +C X +A X +A Y +C X +B X +A X +B X +A X +A X +B Y +B Y +A X +A X +A X +A X +A X +A Y +A X +B X +B Y +A Y +C Z +C X +A X +A Y +A X +A X +A Y +A X +A Y +A X +B X +C X +A X +B X +A X +C X +A Y +B X +B X +A X +A X +C Y +B X +A X +C X +B X +B X +A X +A X +B X +A Y +C X +A Y +A X +A X +A Y +B X +A X +A X +A X +B Y +A X +A X +A Y +A X +A X +B Y +B Y +B X +C X +B Y +A X +C X +C X +A Y +A X +A Z +B X +C X +A Y +B X +A X +A X +A X +A Y +C X +A X +A Z +A X +A Y +B Y +A X +C X +B X +A Y +B Z +B X +C Y +B X +B Z +A Y +B X +C X +C Y +A X +A Y +A X +B X +A Y +B Y +A X +C Y +A Y +B Y +A X +B Y +B X +B Y +A X +B Y +A X +C Z +A X +C X +A Y +A X +C X +A X +A X +A X +C X +B Z +A X +B Y +B X +A Y +A X +A X +B Y +B Y +A Y +B X +A X +C Y +A X +C X +A X +A X +A X +A X +A X +C Z +C X +A Z +C Z +A X +A Y +B X +C X +B X +B Y +C X +B X +A X +A X +A X +A Y +B X +B Y +A X +C X +A X +A X +A X +A X +C Y +A Z +C X +A X +A Y +B X +A Y +A X +A Y +A X +A X +A X +A X +A Y +A X +B X +A X +A X +C Y +C Y +A X +C X +A X +A X +C X +C X +B Z +B X +B X +A X +A Y +B Y +A X +A X +C X +C X +C X +B X +C X +B Y +A X +B Y +B X +B X +A X +B Y +A Y +C X +B X +C X +A Y +B X +C X +A X +C X +A X +B Y +A X +A X +B Z +C X +B X +C X +B X +A X +A X +A X +A X +A X +C X +C X +A X +A Z +A Y +A X +A X +A X +A X +C Y +C Y +B Z +A X +A X +B X +B X +A Y +A X +B Y +A X +B Y +A X +C Y +C X +A Y +B Y +C X +A X +A X +A X +A Y +A X +A X +A X +B Y +B X +C X +C Y +A Y +A Z +B X +C X +B X +C X +A X +B Z +B Y +A X +C X +A Y +B X +B X +A Y +A X +A X +A Y +A X +B X +A X +A X +C Y +C Y +A Y +A Y +B Y +B Y +B Y +B X +A X +A Y +B Y +B X +A Y +A X +A Y +C X +C X +B Y +A Y +B Y +A Y +A X +B Y +B X +C X +A X +A X +A X +B Y +B X +A X +B Y +A Y +A X +C X +A X +B Y +A X +A X +B Y +A Y +A X +C Y +B Z +A Y +C X +A Y +A X +B Y +A X +B Y +B Y +B X +B X +A X +A X +C X +B Y +B X +C X +B Y +A X +A X +A X +A X +B Y +C X +B X +A X +A X +A Y +C Y +A Y +B X +A X +B X +A X +A Y +B Y +A X +C X +C X +A Y +B X +C Y +A Y +B X +A X +A Y +C X +A X +A X +B Y +A Y +B X +B Y +B Y +A X +A X +A X +B Y +A Y +A X +B X +A Y +A Y +B X +C Y +A X +A Y +A X +B X +A X +B X +C Z +A X +A X +B Y +A X +A X +A X +C Z +C X +A Z +C Y +B X +A Y +B X +A X +A Y +A X +C X +A X +A X +C Y +A Z +C Y +B Y +B X +B X +A Y +C X +B X +A Z +A X +A Z +C X +A X +C Z +C X +B Z +C Y +B Y +A X +B Y +A X +A X +C X +B X +A X +C Z +B Y +B Y +A Y +B Y +A X +A X +B Y +A X +A X +C Y +C X +A X +C Y +C X +B X +B X +A X +B Y +A Y +A X +B Y +B Y +B X +B X +A X +B X +B X +B Y +B Y +C X +B X +B X +A X +A X +A X +A X +A Y +C Y +A X +A Y +C Z +A Y +C X +A X +C Y +A X +A X +A Y +A Z +A Y +A Y +A X +A Y +A Z +C X +C Z +B X +A X +A X +B X +A X +A X +A X +C X +A X +A Y +A X +A X +A Y +C Z +C X +A X +A X +A Z +A X +C X +A Y +C X +A Y +C X +C X +A X +A X +A Y +B Y +C X +C X +B X +B Z +B X +B X +A X +C X +A Y +C X +A Z +B X +B Y +A Y +A Y +A X +A Y +A X +A X +A Y +A X +A X +B Z +A X +A X +A X +B Y +B Y +C Z +A Y +A Y +B Y +A X +B X +C X +C Y +C X +B X +C X +A Y +A X +A X +B X +C X +B X +A Y +B X +B Z +A Y +A X +A Y +B X +B Z +A X +A X +C X +A X +A Y +A X +B X +A X +A X +A Z +B X +B Y +C Y +C X +A Y +A X +B Y +C X +A X +C Y +A X +A Y +A Y +A X +A X +C X +C X +A Y +A Y +C X +A X +B X +C X +B Y +C Y +C X +B X +B Y +C X +B X +B Y +A X +A X +B X +A Y +A X +B X +A X +C Y +A X +B X +A Y +C Y +A X +A Y +A Z +C Z +A X +A X +C X +A X +B X +A X +C X +C X +A Y +A X +C Y +A Y +A X +B Y +A X +A Y +A X +C Z +C Z +C X +A X +A X +A X +A X +C X +A X +C X +B X +B X +A X +A Y +B Y +B X +B X +A Y +A Y +A X +A X +B Y +B X +A X +C X +B X +C X +B Y +B Z +B Y +A X +A X +A X +A X +A X +B Y +A X +C X +B Z +A X +C Y +A X +B X +C Y +A X +A Y +B X +A X +B Y +B X +A Y +C Y +C X +A Y +A X +A X +A X +C X +B X +C X +A Y +A X +A Y +C Z +C X +A X +A Y +B X +B X +B X +B X +A X +B X +A Z +B Y +A X +A X +A X +C Z +A Y +A Y +C X +C X +C Y +B Y +A Y +A X +A X +C Y +A X +C X +A X +A X +C Y +A Y +A X +C X +A X +A Y +C X +A Y +A X +A X +A X +B X +B X +A X +B Y +C Y +C X +A Y +B X +B X +B Z +C X +B Y +A Y +C Z +B X +C X +A X +A Y +B Y +B X +C Z +B X +A X +C X +C X +A X +A X +A Y +B Y +B X +A Y +C Y +B Y +B Y +A X +A Y +A X +B X +A Y +A X +A Y +A X +B Z +B X +A X +A Y +A X +B Y +A Y +A X +A X +C X +A X +A X +A X +A X +B Y +B X +A X +A X +C Y +C X +A Y +A X +B X +A X +B X +B X +B Y +A X +B X +B Y +A X +B X +C X +A X +A X +C Z +A X +B X +A X +B X +B X +B Y +A X +B Y +C Y +A X +C X +A X +B X +B Y +A X +C X +B X +A X +C Y +C X +B X +A X +B X +A Z +C Y +A X +A X +B X +A Y +B X +A X +A Y +B X +A X +C Y +A X +C X +B X +A X +C Y +C X +A X +B Y +B X +A Y +B X +A X +B X +A Y +B X +A X +A X +C X +A X +A X +A X +A X +C X +C X +B X +B Y +B X +B Z +A X +B X +B Y +B X +B X +A X +A Z +A Z +A X +B Y +A X +B X +B Y +A X +B Y +B X +A X +C X +C Y +A X +A X +B X +B X +B Y +A X +C X +B Y +A X +A Z +A X +C Y +A Y +B X +C X +C X +A X +B X +C X +A Z +A X +A X +B Y +C X +A X +A Y +C Z +B X +A Y +A X +A Z +C Y +A X +C X +A X +C Y +B X +A X +A X +B Y +A X +B X +B X +B X +C X +C X +A X +C Z +A X +C Y +A X +C Y +A Y +B Y +B X +B Y +B X +C Y +B Y +B Y +B X +B Y +A Y +A Y +C Z +A X +A X +A X +A Z +B X +B Y +B X +B Y +A X +C X +B X +A X +C Y +B X +C X +C Y +B Y +A X +B Y +B X +C X +B X +C X +B X +A X +C X +B Z +B Z +C X +A Y +B X +A Y +A X +B X +C Y +C X +A Y +C Y +B Z +B Y +B Y +B Y +B Z +B Y +A X +A X +A Y +B Y +B Y +A X +A Z +C X +A X +A Y +C X +A Y +A X +B X +A X +A X +C X +A X +A X +C Y +B Y +A Y +A X +A X +B Y +A X +B X +A X +A X +B X +B X +A X +B Y +A X +A Y +B Y +A Y +A X +C X +A Y +A X +C X +A X +A X +B X +C Y +C Y +B X +B Z +A X +A Y +A X +A X +C Z +A X +B X +A Z +A X +A X +A X +A X +A X +A X +C X +B X +B X +C X +A X +A X +A X +A X +A X +A X +B X +A X +C X +A Y +A X +A X +A X +A X +B X +B Y +A Y +A X +A X +C X +C X +A X +A X +C X +A X +A X +A X +A X +A X +A X +C X +A X +A X +A X +A X +B X +A X +A X +B Y +C Y +A X +A Y +C Y +A X +B X +B X +A X +A X +A X +B X +A X +A X +A X +A Y +A X +B Y +A Y +A X +A Y +A X +C X +A X +C Y +B X +B X +A X +A X +A X +A X +A X +C Y +A Z +A X +B X +B X +A X +A X +C Z +A X +B Z +B Y +C Y +A X +A X +C X +B X +B X +B X +C X +A X +A Y +B Y +C X +A X +B Y +A X +C Z +B X +A Y +A X +A X +C Y +A X +A X +C X +A X +B X +B Y +B Y +B X +A X +A Y +C X +A X +A X +A X +B X +C X +B Y +A X +A X +A Y +A X +A X +B X +C X +C X +A Y +B X +A X +A X +A X +B Y +A X +B X +A X +A X +A X +A Y +A X +A Z +C X +B Y +B X +A X +B X +C X +A X +A X +B X +A X +A X +A X +A X +B X +A X +C X +A Y +B X +C X +A X +B X +A X +B Y +A X +C Y +A X +C Y +C X +B Y +A Y +A X +A X +B X +A X +C X +A X +A Z +B X +A X +A X +A Y +A X +A X +C X +B Y +C Z +A X +A Y +B X +B X +A X +B Y +C X +A X +B X +A Y +B X +A X +A Y +A X +A X +C Y +B X +A Y +C X +C X +A Y +A Y +A X +B Z +A Y +C X +C X +C Y +A Y +B X +B Z +A X +B Y +A X +A X +B X +A Y +C X +C Y +A X +B Y +A Y +A X +B Z +B Y +A X +B X +A X +A X +B Y +A Y +A X +A X +A X +A Y +A X +A X +C X +A X +A X +C X +A X +A X +C Z +B X +A Y +A X +B Y +B X +A X +A X +A X +C Y +C Y +B Y +A X +C X +C X +B X +A X +A X +A X +A Y +A X +A X +B Z +C X +A X +A X +A X +B Y +B X +C X +B X +A X +B X +A X +C X +A X +C X +A X +C X +B Y +B X +A X +A X +B Y +B X +B X +A X +B X +C Y +A X +A Y +A Y +A Y +A Z +B Y +A X +A X +A X +A X +A Z +A X +A X +A X +B Z +B Y +C Y +A X +A X +B X +C X +A Y +A X +B X +A X +A X +B X +B Y +A X +B X +C X +B X +A X +A X +A X +A X +B X +B X +C Y +B X +B X +A X +B X +A X +B Y +B X +A X +A X +A Y +B X +A X +B Y +A Y +B Y +B X +A Z +A X +B Y +A X +B X +A X +A X +A X +B Y +B X +A X +C Z +A Y +A Y +C X +B Z +B X +C Z +B X +B X +A X +A X +B Y +C X +A X +A Z +B X +A X +A X +B Y +A X +A X +A X +B Y +A X +C Y +A X +C Y +A X +C Y +B X +A Y +A X +B X +A X +B Y +A X +B X +B X +A Z +A X +C Y +B Y +A X +A X +C X +B Y +C Y +C X +A Y +B Y +A Y +A Y +B X +A X +A X +A X +A X +A Y +A X +A X +A X +B Y +A X +A Y +C X +A X +B X +A X +A X +A X +C Z +A X +A Y +A X +C Z +B Y +B X +A X +A Z +A X +A X +A Y +A X +A X +A X +B Y +A X +B X +A X +A X +A X +A X +B X +B Z +C X +C X +C X +B Y +A X +B Y +B X +A Y +B X +B X +A X +C Y +B X +A X +A X +A X +A X +A X +A X +B Y +C Y +B X +C Y +B Y +C X +A Y +C X +B X +C X +B X +A X +A X +B Y +A X +C X +A Y +C X +C X +B Y +A X +C X +C X +B Z +A X +C X +A Y +B Y +A X +A Y +A X +B X +A X +A X +B Y +A Z +A X +B Y +B X +A X +A Y +B X +B X +A X +A X +A Y +A X +C X +A X +B X +C X +C X +C Y +A X +B X +B Y +A X +C X +A X +B Y +A X +B X +B Z +A X +A X +A X +B X +C X +C X +B X +A Y +A X +A Y +A X +A X +A X +A X +C Y +B X +A X +A X +A X +B Y +A X +B X +B Y +A Z +A Y +A X +A Y +A X +A Y +B Z +A X +B Y +B Z +B X +A X +C X +C Y +A X +A X +A X +B X +A Y +C X +A X +B Y +A Y +B X +B X +A X +A Y +B X +A Y +C X +A X +C X +A X +C X +A X +A X +C X +A X +A X +A Y +B X +C X +B Y +A Y +A X +A X +A X +A Z +B Y +A X +A X +B Y +A Y +B Y +A X +B Y +B X +A X +A X +A X +B X +B Y +A X +C Z +B Z +A X +A X +A X +B X +B Y +A X +B Z +A X +A Y +A Y +A Y +C X +B Y +A X +A X +C Y +B X +A Y +A X +A X +B Y +C X +C X +C X +A X +A X +A X +B Z +A X +C X +A X +A X +B X +B X +A X +C Y +A X +B X +C X +B Y +A X +B Y +C X +A X +C X +B Y +A X +A Y +C X +C Z +A X +C X +A X +A X +C X +A Y +C X +B Y +A X +C Z +A X +B X +B Y +A Y +A X +A X +A X +A X +A Y +A Y +B X +C X +A Y +A X +C X +B X +B Y +C X +B X +A X +B X +A X +C Y +A X +A X +A X +A X +C X +A X +B X +A X +B X +A X +A Y +C X +C Y +C X +A Z +B X +A Z +A X +B Y +A Y +B X +A X +B Y +A Y +A X +B Y +A X +B X +A X +A X +A X +A X +B Y +A Y +A X +A X +B X +B Z +A Y +A Y +C Y +C Y +A X +C X +A X +B Y +B X +B Y +B X +C X +B X +C X +A X +B Y +A X +B X +A X +B X +C Y +B X +A X +A Y +A X +B Y +C X +C X +A X +B Z +A X +A X +B Y +A X +A X +B X +A Y +C X +A X +C Y +A Y +C X +A Y +A X +A X +A X +A Y +B X +B X +A Y +C X +B Y +A Y +B X +B X +B X +B X +A X +B X +B X +A X +C X +A X +C X +C X +A X +C X +B X +A Y +A Z +A X +A X +A X +A Y +A X +A X +C Z +A X +B X +C X +A X +B X +C X +C X +A X +B Y +A X +A X +A X +A Y +B Y +B Y +A X +B X +A X +C X +A X +B Y +C Y +C X +C X +B X +B X +C X +A Y +B X +A X +A X +A X +A X +A Y +B X +B X +C Y +C Y +B Y +B X +A X +C Y +A X +C Z +C X +A X +B Z +A X +A Z +C X +B Y +A X +A Y +A X +B X +A Y +C X +C Y +B X +B X +B Y +B Y +C X +B Y +B Y +B X +C X +C X +A X +A X +A Y +A X +A Y +B X +A X +B Y +B X +A X +A X +A Y +B X +B X +A X +B X +C Y +A Y +B Y +C Y +B Y +A X +B Y +B X +B Z +A Y +A Y +C Y +B X +A X +A X +B Y +A X +A X +B X +A X +A X +A X +B X +B X +B Y +A X +C X +A X +B X +A X +A X +A Y +B X +B X +B X +C X +B Y +C Z +A X +C X +A X +B X +A X +A Y +B Y +A Z +A X +C X +A Y +A X +A X +A X +A X +A Y +A X +C X +A X +C Y +B X +A X +A X +A X +A X +A X +C X +A X +B X +B Y +B Y +B X +C Z +C X +B X +C Y +A X +A X +A X +A X +A X +C X +A X +B X +C X +C X +A X +A X +B X +A X +A X +A X +B X +A X +C X +A X +A Y +A X +B Y +A X +B X +A Y +C X +B X +C Y +C Y +B X +A X +B X +C X +A X +C X +A X +C X +B X +B X +C X +C X +B X +B X +C Y +B X +A X +B X +B X +B Y +A Y +B X +A X +C Y +A Y +C Y +A X +B Y +A X +A X +A X +B Y +B X +A Y +A X +A X +A Y +B X +B Y +A Y +B X +C X +C Z +B X +A Y +A X +C X +A X +C X +B Z +C X +A Y +A X +C X +B Y +A Z +B Y +A X +A X +A Y +C X +A Z +A X +B Y +A X +B X +A Y +A Y +A X +A X +A X +C Y +B X +A X +B X +B Y +B Y +A X +A X +A Y +A X +C X +B X +C X +B X +B X +C Y +A Y +B X +A X +A X +A X +C X +C X +A X +B X +A X +A X +A Z +A X +C X +B X +A X +C Y +A Y +C Y +B Y +B Y +B Z +A X +C X +A X +B Y +B Y +A X +B Y +A X +B Y +B X +B X +C X +B Y +B X +A X +A Y +B X +A X +B Z +A Y +B X +B X +A Y +C Y +B X +B Y +A X +B X +A Y +A Y +B X +B Y +B X +A X +C X +A X +A X +A X +B Y +A Y +B X +C X +C Z +A X +B Y +A Y +A X +B X +A X +A Y +A X +A Y +A X +A X +A X +C X +A Y +C Y +A X +A X +C Z +B X +A Y +B X +B X +B X +B X +B X +A X +A X +B X +B Y +A X +C Y +C X +A X +A X +A X +A X +A X +A X +A X +A Y +B Y +A X +A X +A Z +C Y +C Y +B X +C Z +A X +A X +A X +B Z +B Y +A X +A X +A X +B X +A X +C X +C X +C X +B X +A X +A X +C Z +B Z +C Y +A X +A X +A X +C Z +A X +A X +C X +C X +A X +C Y +A X +A Y +A X +A X +A Z +C X +C X +A Y +B X +B X +A Y +A X +B X +C Y +A X +A Y +B Z +A X +C Y +A X +B Y +A X +A Y +A X +C Z +A X +B X +A X +B Y +A X +A X +A X +A X +A X +B Y +C X +A X +B X +A X +A Y +A Z +A X +A X +B Y +B X +C X +A X +A X +B X +B Y +B Y +A Y +B Z +B Y +A X +A X +A X +A X +B X +C Y +A X +A X +A X +A X +A X +A X +A X +A X +B Y +A X +B X +C X +C X +C X +C X +A X +B Y +A X +B X +B X +A X +A X +C Z +A X +B X +B X +C X +A X +B X +B X +B X +B X +B Y +A X +B X +A Y +A X +A Y +B Y +A X +C Y +B X +A X +A X +A X +A Z +A Y +A X +C X +C X +B X +A X +A X +B X +A X +A Y +C Z +A Y +B X +B Y +A X +C Y +B Z diff --git a/src/Days/Day01.hs b/src/Days/Day01.hs index f9fd34f..e2f5902 100644 --- a/src/Days/Day01.hs +++ b/src/Days/Day01.hs @@ -12,4 +12,4 @@ solve :: [String]-> Int solve = maximum . map (sum . (map read)) . splitOn "" solveB :: [String] -> Int -solveB = sum . take 3 .reverse. sort . map (sum . (map read)) . splitOn "" +solveB = sum. take 3 .reverse. sort . map (sum . (map read)) . splitOn "" diff --git a/src/Days/Day02.hs b/src/Days/Day02.hs new file mode 100644 index 0000000..6762b7c --- /dev/null +++ b/src/Days/Day02.hs @@ -0,0 +1,57 @@ +module Days.Day02 where + +import AOCUtil +import Data.List + +runA :: IO () +runA = interactF "data/day02.txt" (show . solve . lines) + +runB :: IO () +runB = interactF "data/day02.txt" (show . sum . map (scoreB . words) . lines) + +solve :: [String] -> Int +solve = sum . map (score . words) + +score :: [String] -> Int +score [a, b] = myScore b + winScore a b +score _ = undefined + +-- data Symbol = Rock | Paper | Scissor + +-- readSymbol :: String -> Symbol +-- readSymbol "A" = Rock +-- readSymbol "X" = Rock +-- readSymbol "B" = Paper +-- readSymbol "Y" = Paper +-- readSymbol "C" = Scissor +-- readSymbol "Z" = Scissor +-- readSymbol _ = undefined + +scoreB :: [String] -> Int +scoreB [a, b] = myScore (choose a b) + winScore a (choose a b) +scoreB _ = undefined + +myScore :: String -> Int +myScore "X" = 1 +myScore "Y" = 2 +myScore "Z" = 3 + +winScore :: String -> String -> Int +winScore "A" "Y" = 6 +winScore "B" "Z" = 6 +winScore "C" "X" = 6 +winScore "A" "X" = 3 +winScore "B" "Y" = 3 +winScore "C" "Z" = 3 +winScore _ _ = 0 + +choose :: String -> String -> String +choose "A" "X" = "Z" +choose "A" "Y" = "X" +choose "A" "Z" = "Y" +choose "B" "X" = "X" +choose "B" "Y" = "Y" +choose "B" "Z" = "Z" +choose "C" "X" = "Y" +choose "C" "Y" = "Z" +choose "C" "Z" = "X" diff --git a/stack.yaml b/stack.yaml index 73bd4d9..53f016b 100644 --- a/stack.yaml +++ b/stack.yaml @@ -17,7 +17,8 @@ # # resolver: ./custom-snapshot.yaml # resolver: https://example.com/snapshots/2018-01-01.yaml -resolver: lts-20.2 +resolver: + compiler: ghc-9.2.4 # User packages to be built. # Various formats can be used as shown in the example below. diff --git a/stack.yaml.lock b/stack.yaml.lock index 639d60a..74c2087 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -4,9 +4,4 @@ # https://docs.haskellstack.org/en/stable/lock_files packages: [] -snapshots: -- completed: - size: 648432 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/2.yaml - sha256: fc39d8afc97531d53d87b10abdef593bce503c0c1e46c2e9a84ebcbc78bf8470 - original: lts-20.2 +snapshots: []