solve: day 10
- solve: day 10, part 1 - solve: day 10, part 2
This commit is contained in:
parent
8dcd832fdc
commit
8dae9b8c45
3 changed files with 47 additions and 0 deletions
4
2020/10/day10.hs
Normal file
4
2020/10/day10.hs
Normal file
|
@ -0,0 +1,4 @@
|
|||
module Day10 where
|
||||
|
||||
parse :: String -> [Int]
|
||||
parse = map read . lines
|
15
2020/10/part1.hs
Executable file
15
2020/10/part1.hs
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env runghc
|
||||
|
||||
import Day10
|
||||
import Data.List
|
||||
|
||||
main = interact (show . solve . parse)
|
||||
|
||||
solve xs = ones * threes
|
||||
where
|
||||
sorted = 0:(sort xs)
|
||||
differences = zipWith (flip (-)) sorted (tail sorted)
|
||||
ones = count 1 differences
|
||||
threes = count 3 differences + 1
|
||||
|
||||
count x = length . filter (==x)
|
28
2020/10/part2.hs
Executable file
28
2020/10/part2.hs
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env runghc
|
||||
|
||||
import Day10
|
||||
import Data.Array
|
||||
import Data.IntSet (IntSet)
|
||||
import qualified Data.IntSet as IntSet
|
||||
|
||||
main = interact (show . solve . parse)
|
||||
|
||||
countPaths inp = pathsFrom start
|
||||
where
|
||||
start = IntSet.findMax inpSet + 3
|
||||
|
||||
pathsFrom 0 = 1
|
||||
pathsFrom x
|
||||
| x < 0 = 0
|
||||
| IntSet.member x allowed =
|
||||
sum $ map ((!) memo) $ filter (>= 0) $ map ((-) x) [1, 2, 3]
|
||||
| otherwise = 0
|
||||
|
||||
inpSet = IntSet.fromList inp
|
||||
allowed = IntSet.insert start inpSet
|
||||
|
||||
memo = listArray bnds
|
||||
[ pathsFrom i | i <- range bnds ]
|
||||
bnds = (0, start)
|
||||
|
||||
solve = countPaths
|
Loading…
Reference in a new issue