From 636e61001d02d32cedc310a6a278a5eb437a8b96 Mon Sep 17 00:00:00 2001 From: Eric Mertens Date: Sun, 3 Dec 2023 22:50:11 -0800 Subject: [PATCH] wibble --- solutions/src/2023/04.hs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/solutions/src/2023/04.hs b/solutions/src/2023/04.hs index 95982aa..9b63230 100644 --- a/solutions/src/2023/04.hs +++ b/solutions/src/2023/04.hs @@ -32,7 +32,7 @@ module Main where import Advent (format) import Data.List (intersect) --- | +-- | Parse the input and print out the answers to both parts. -- -- >>> :main -- 21485 @@ -40,13 +40,10 @@ import Data.List (intersect) main :: IO () main = do input <- [format|2023 4 (Card +%d:( +%d)* %|( +%d)*%n)*|] - let wins = toWins input + let wins = [length (a `intersect` b) | (_, a, b) <- input] print (sum (map points wins)) print (sum (asPart2 wins)) -toWins :: [(Int, [Int], [Int])] -> [Int] -toWins input = [length (a `intersect` b) | (_, a, b) <- input] - -- | Convert wins to points for part 1 points :: Int -> Int points 0 = 0 @@ -55,6 +52,4 @@ points n = 2 ^ (n - 1) -- | Convert a list of wins for each card into the number of cards -- each card turns into. asPart2 :: [Int] -> [Int] -asPart2 = foldr f [] - where - f wins rest = (1 + sum (take wins rest)) : rest +asPart2 = foldr (\wins xs -> (1 + sum (take wins xs)) : xs) []