diff --git a/hs/src/Aoc/Y2020.hs b/hs/src/Aoc/Y2020.hs index c37eaf5..975d004 100644 --- a/hs/src/Aoc/Y2020.hs +++ b/hs/src/Aoc/Y2020.hs @@ -17,6 +17,7 @@ import qualified Aoc.Y2020.D11 as D11 import qualified Aoc.Y2020.D12 as D12 import qualified Aoc.Y2020.D13 as D13 import qualified Aoc.Y2020.D14 as D14 +import qualified Aoc.Y2020.D15 as D15 year :: Year year = Year 2020 @@ -34,4 +35,5 @@ year = Year 2020 , (12, D12.day) , (13, D13.day) , (14, D14.day) + , (15, D15.day) ] diff --git a/hs/src/Aoc/Y2020/D15.hs b/hs/src/Aoc/Y2020/D15.hs new file mode 100644 index 0000000..942a173 --- /dev/null +++ b/hs/src/Aoc/Y2020/D15.hs @@ -0,0 +1,28 @@ +module Aoc.Y2020.D15 + ( day + ) where + +import Data.List + +import Aoc.Day +import Aoc.Parse + +parser :: Parser [Int] +parser = (decimal `sepBy` char ',') <* newline + +step :: [Int] -> [Int] +step [] = error "list must not be empty" +step (x:xs) = case elemIndex x xs of + Nothing -> 0 : x : xs + Just i -> (i + 1) : x : xs + +stepUntil :: Int -> [Int] -> [Int] +stepUntil amount nums = iterate step nums !! (amount - length nums) + +solver :: [Int] -> IO () +solver nums = do + putStrLn ">> Part 1" + print $ head $ stepUntil 2020 $ reverse nums + +day :: Day +day = dayParse parser solver