diff options
Diffstat (limited to '2020/10.hs')
-rw-r--r-- | 2020/10.hs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/2020/10.hs b/2020/10.hs new file mode 100644 index 0000000..b1c2f69 --- /dev/null +++ b/2020/10.hs @@ -0,0 +1,23 @@ +module Main where + +import qualified Data.Array as A +import Data.List (sort) + +import Input + + +main :: IO () +main = do + input <- map read <$> getInput 10 :: IO [Int] + let deviceRate = maximum input + 3 + input' = 0 : deviceRate : input + diffs = zipWith (-) (tail (sort input')) (sort input') + print (length (filter (== 1) diffs) * length (filter (== 3) diffs)) + + let numArrangements _ 0 = 1 :: Int + numArrangements recur target = + let suitable = filter (\i -> target - 3 <= i && i < target) (0 : input) + in sum (map recur suitable) + dyn = A.listArray (0, deviceRate) [numArrangements (dyn A.!) i | i <- [0..deviceRate]] + -- print (Data.Function.fix numArrangements deviceRate) -- naive recursion + print (dyn A.! deviceRate) |