From 9d1ecddf7b8379f440648dd2d25cac1017d57c9d Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Mon, 2 Dec 2024 18:29:31 +0100 Subject: [PATCH] Day 2 --- Day2/puzzle1.hs | 14 ++++++++++++++ Day2/puzzle2.hs | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 Day2/puzzle1.hs create mode 100644 Day2/puzzle2.hs diff --git a/Day2/puzzle1.hs b/Day2/puzzle1.hs new file mode 100644 index 0000000..751737f --- /dev/null +++ b/Day2/puzzle1.hs @@ -0,0 +1,14 @@ +import Data.List (sort) +import System.IO + +isSafe :: [Int] -> Bool +isSafe xs = (isAscending xs || isDescending xs) && maximum distances <= 3 && minimum distances >= 1 + where isAscending xs = xs == sort xs + isDescending xs = xs == reverse (sort xs) + distances = map abs $ zipWith (-) xs (tail xs) + +main = do + contents <- lines <$> readFile "day2.txt" + let reports = map read . words <$> contents + safeCount = length $ filter isSafe reports + print safeCount diff --git a/Day2/puzzle2.hs b/Day2/puzzle2.hs new file mode 100644 index 0000000..f595599 --- /dev/null +++ b/Day2/puzzle2.hs @@ -0,0 +1,19 @@ +import Data.List (sort, inits, tails) +import System.IO + +isSafe :: [Int] -> Bool +isSafe xs = (isAscending xs || isDescending xs) && maximum distances <= 3 && minimum distances >= 1 + where isAscending xs = xs == sort xs + isDescending xs = xs == reverse (sort xs) + distances = map abs $ zipWith (-) xs (tail xs) + +removeLevel :: [Int] -> [[Int]] +removeLevel xs = zipWith (++) ys zs + where ys = map init $ tail (inits xs) + zs = map tail $ init (tails xs) + +main = do + contents <- lines <$> readFile "day2.txt" + let reports = map read . words <$> contents + safeCount = length . filter (any isSafe) $ map removeLevel reports + print safeCount