From 97595af8deaa257cdf7a4dd884077e469ed13bd4 Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Tue, 3 Dec 2024 18:52:51 +0100 Subject: [PATCH] Day 3 --- Day1/puzzle1.hs | 3 +-- Day1/puzzle2.hs | 3 +-- Day2/puzzle1.hs | 3 +-- Day2/puzzle2.hs | 3 +-- Day3/puzzle1.hs | 12 ++++++++++++ Day3/puzzle2.hs | 16 ++++++++++++++++ 6 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 Day3/puzzle1.hs create mode 100644 Day3/puzzle2.hs diff --git a/Day1/puzzle1.hs b/Day1/puzzle1.hs index af5a893..3e5ef60 100644 --- a/Day1/puzzle1.hs +++ b/Day1/puzzle1.hs @@ -7,5 +7,4 @@ listDistance xs ys = sum $ map abs $ zipWith (-) (sort xs) (sort ys) main = do contents <- lines <$> readFile "day1.txt" let [x, y] = transpose $ map read . words <$> contents - distance = listDistance x y - print distance + print $ listDistance x y diff --git a/Day1/puzzle2.hs b/Day1/puzzle2.hs index c3f7b44..6efe9d9 100644 --- a/Day1/puzzle2.hs +++ b/Day1/puzzle2.hs @@ -8,5 +8,4 @@ similarityScore xs ys = let elemsY = [ (head y, length y) | y <- (group . sort) main = do contents <- lines <$> readFile "day1.txt" let [x, y] = transpose $ map read . words <$> contents - score = similarityScore x y - print score + print $ similarityScore x y diff --git a/Day2/puzzle1.hs b/Day2/puzzle1.hs index 751737f..eb85305 100644 --- a/Day2/puzzle1.hs +++ b/Day2/puzzle1.hs @@ -10,5 +10,4 @@ isSafe xs = (isAscending xs || isDescending xs) && maximum distances <= 3 && min main = do contents <- lines <$> readFile "day2.txt" let reports = map read . words <$> contents - safeCount = length $ filter isSafe reports - print safeCount + print . length $ filter isSafe reports diff --git a/Day2/puzzle2.hs b/Day2/puzzle2.hs index f595599..160d86d 100644 --- a/Day2/puzzle2.hs +++ b/Day2/puzzle2.hs @@ -15,5 +15,4 @@ removeLevel xs = zipWith (++) ys zs main = do contents <- lines <$> readFile "day2.txt" let reports = map read . words <$> contents - safeCount = length . filter (any isSafe) $ map removeLevel reports - print safeCount + print . length . filter (any isSafe) $ map removeLevel reports diff --git a/Day3/puzzle1.hs b/Day3/puzzle1.hs new file mode 100644 index 0000000..4af28bf --- /dev/null +++ b/Day3/puzzle1.hs @@ -0,0 +1,12 @@ +import Data.List.Split (splitOn) +import Data.Char (isDigit) +import Text.Regex.TDFA (getAllTextMatches, (=~)) + +sumMul :: [String] -> Int +sumMul xs = let vals = map (splitOn "," . filter (`elem` "0123456789,")) xs + in sum $ map (product . map read) vals + +main = do + contents <- readFile "day3.txt" + let mults = getAllTextMatches (contents =~ "mul\\([0-9]+,[0-9]+\\)") :: [String] + print $ sumMul mults diff --git a/Day3/puzzle2.hs b/Day3/puzzle2.hs new file mode 100644 index 0000000..305fd3e --- /dev/null +++ b/Day3/puzzle2.hs @@ -0,0 +1,16 @@ +import Data.List (isPrefixOf) +import Data.List.Split (split, splitOn, startsWith) +import Data.Char (isDigit) +import Text.Regex.TDFA (getAllTextMatches, (=~)) + +sumMul :: [String] -> Int +sumMul xs = let vals = map (splitOn "," . filter (`elem` "0123456789,")) xs + in sum $ map (product . map read) vals + +filterDonts :: [String] -> String +filterDonts = concat . filter (not . isPrefixOf "don't()") . concatMap (split (startsWith "do()")) + +main = do + contents <- split (startsWith "don't()") <$> readFile "day3.txt" + let mults = getAllTextMatches (filterDonts contents =~ "mul\\([0-9]+,[0-9]+\\)") :: [String] + print $ sumMul mults