parent
619bbd0770
commit
3e425b56f5
@ -0,0 +1,24 @@
|
||||
module Lib where
|
||||
|
||||
import Data.List (delete)
|
||||
|
||||
parsedFileString fileString = [[read word :: Int | word <- words line] | line <- lines fileString]
|
||||
|
||||
getDiffs :: [Int] -> [Int]
|
||||
getDiffs report = [xiplus1 - xi | (xiplus1, xi) <- zip report (tail report)]
|
||||
|
||||
checkReport :: [Int] -> Bool
|
||||
checkReport reports =
|
||||
(all (> 0) diffs || all (< 0) diffs)
|
||||
&& all (\x -> let absX = abs x in absX > 0 && absX < 4) diffs
|
||||
where
|
||||
diffs = getDiffs reports
|
||||
|
||||
-- This is a non-ideal brute-force approach but don't have time to improve
|
||||
checkReportDampened :: [Int] -> Bool
|
||||
checkReportDampened reports =
|
||||
checkReport reports
|
||||
|| let reportSubsets = [checkReport (take n reports ++ drop (n + 1) reports) | n <- [0 .. (length reports)]]
|
||||
in or reportSubsets
|
||||
|
||||
getSafeReportCount checkFun = foldr ((+) . fromEnum . checkFun) 0
|
@ -0,0 +1,13 @@
|
||||
# Day 1
|
||||
|
||||
## Instructions
|
||||
|
||||
From this directory open a terminal and execute:
|
||||
|
||||
```sh
|
||||
runhaskell day2.hs
|
||||
```
|
||||
|
||||
The solution for each section will be printed to the terminal output.
|
||||
|
||||
## Notes
|
@ -0,0 +1,11 @@
|
||||
import Lib (checkReport, checkReportDampened, getSafeReportCount, parsedFileString)
|
||||
|
||||
main = do
|
||||
inputs <- readFile "inputs.txt"
|
||||
let parsedInputs = parsedFileString inputs
|
||||
let count = getSafeReportCount checkReport parsedInputs
|
||||
putStrLn "The solution to part 1 is: "
|
||||
print count
|
||||
let count = getSafeReportCount checkReportDampened parsedInputs
|
||||
putStrLn "The solution to part 2 is: "
|
||||
print count
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue