summaryrefslogtreecommitdiff
path: root/2020/10.hs
diff options
context:
space:
mode:
Diffstat (limited to '2020/10.hs')
-rw-r--r--2020/10.hs23
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)