This commit is contained in:
daniele 2024-12-02 18:29:31 +01:00
parent b123e6a99d
commit 9d1ecddf7b
Signed by: fuxino
GPG Key ID: 981A2B2A3BBF5514
2 changed files with 33 additions and 0 deletions

14
Day2/puzzle1.hs Normal file
View File

@ -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

19
Day2/puzzle2.hs Normal file
View File

@ -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