From 8ac5f2e3cf5bfedca24e6ce82ead96215ab8cd87 Mon Sep 17 00:00:00 2001 From: JasterV <49537445+JasterV@users.noreply.github.com> Date: Thu, 17 Apr 2025 01:57:13 +0200 Subject: [PATCH] day11 first approach --- aoc2024.cabal | 1 + input/day11.txt | 1 + src/Day11.hs | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 input/day11.txt create mode 100644 src/Day11.hs diff --git a/aoc2024.cabal b/aoc2024.cabal index 43d691d..4965aeb 100644 --- a/aoc2024.cabal +++ b/aoc2024.cabal @@ -31,6 +31,7 @@ library Data.Point Day1 Day10 + Day11 Day2 Day3 Day4 diff --git a/input/day11.txt b/input/day11.txt new file mode 100644 index 0000000..41a9fbb --- /dev/null +++ b/input/day11.txt @@ -0,0 +1 @@ +2 72 8949 0 981038 86311 246 7636740 diff --git a/src/Day11.hs b/src/Day11.hs new file mode 100644 index 0000000..eaefc5d --- /dev/null +++ b/src/Day11.hs @@ -0,0 +1,33 @@ +module Day11 (partOne, partTwo, nextStone) where + +type Stone = Int + +partOne :: String -> Int +partOne raw = sum $ map (blinkN 25) $ parseStones raw + +partTwo :: String -> Int +partTwo raw = sum $ map (blinkN 75) $ parseStones raw + +blinkN :: Int -> Stone -> Int +blinkN 0 _ = 1 +blinkN blinks stone = sum $ map (blinkN (blinks - 1)) $ nextStone stone + +-- blinkN blinks stone = concatMap (blinkN (blinks - 1)) (nextStone stone) + +nextStone :: Stone -> [Stone] +nextStone stone + | stone == 0 = [1] + | even lengthDigits = + [ read $ take (lengthDigits `div` 2) digits, + read $ drop (lengthDigits `div` 2) digits + ] + | otherwise = [stone * 2024] + where + digits :: [Char] + digits = show stone + + lengthDigits :: Int + lengthDigits = length digits + +parseStones :: String -> [Stone] +parseStones = map read . words