Day 2
This commit is contained in:
parent
b123e6a99d
commit
9d1ecddf7b
14
Day2/puzzle1.hs
Normal file
14
Day2/puzzle1.hs
Normal 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
19
Day2/puzzle2.hs
Normal 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
|
Loading…
x
Reference in New Issue
Block a user