summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2021-12-06 21:58:10 +0100
committerTom Smeding <tom@tomsmeding.com>2021-12-06 21:59:12 +0100
commit4dd247c0e10c8d1c8466ff16fed1daa282bf9e5e (patch)
tree8b99dfa2a35f2057a7bf88e998e5d7fc021f1c57
parent2cade691a86583689f7d3be0fdd8ec2b9638ec67 (diff)
6
-rw-r--r--2021/6.hs20
-rw-r--r--2021/6.in1
-rw-r--r--2021/Util.hs3
3 files changed, 23 insertions, 1 deletions
diff --git a/2021/6.hs b/2021/6.hs
new file mode 100644
index 0000000..90fe324
--- /dev/null
+++ b/2021/6.hs
@@ -0,0 +1,20 @@
+module Main where
+
+import qualified Data.Array as A
+import Numeric.Natural
+
+import Input
+import Util
+
+
+main :: IO ()
+main = do
+ inp <- map read . toList . splitOn (== ',') . head <$> getInput 6
+ let evolve :: A.Array Int Natural -> A.Array Int Natural
+ evolve arr = A.accumArray (+) 0 (0, 8) $
+ [(8, arr A.! 0), (6, arr A.! 0)] ++
+ [(i, arr A.! (i + 1)) | i <- [0..7]]
+ initState = A.accumArray (+) 0 (0, 8) [(i, 1) | i <- inp]
+ after n = sum (A.elems (iterate evolve initState !! n))
+ print (after 80)
+ print (after 256)
diff --git a/2021/6.in b/2021/6.in
new file mode 100644
index 0000000..70f9ad7
--- /dev/null
+++ b/2021/6.in
@@ -0,0 +1 @@
+1,4,3,3,1,3,1,1,1,2,1,1,1,4,4,1,5,5,3,1,3,5,2,1,5,2,4,1,4,5,4,1,5,1,5,5,1,1,1,4,1,5,1,1,1,1,1,4,1,2,5,1,4,1,2,1,1,5,1,1,1,1,4,1,5,1,1,2,1,4,5,1,2,1,2,2,1,1,1,1,1,5,5,3,1,1,1,1,1,4,2,4,1,2,1,4,2,3,1,4,5,3,3,2,1,1,5,4,1,1,1,2,1,1,5,4,5,1,3,1,1,1,1,1,1,2,1,3,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,4,5,1,3,1,4,4,2,3,4,1,1,1,5,1,1,1,4,1,5,4,3,1,5,1,1,1,1,1,5,4,1,1,1,4,3,1,3,3,1,3,2,1,1,3,1,1,4,5,1,1,1,1,1,3,1,4,1,3,1,5,4,5,1,1,5,1,1,4,1,1,1,3,1,1,4,2,3,1,1,1,1,2,4,1,1,1,1,1,2,3,1,5,5,1,4,1,1,1,1,3,3,1,4,1,2,1,3,1,1,1,3,2,2,1,5,1,1,3,2,1,1,5,1,1,1,1,1,1,1,1,1,1,2,5,1,1,1,1,3,1,1,1,1,1,1,1,1,5,5,1
diff --git a/2021/Util.hs b/2021/Util.hs
index 7cd674d..f1e6046 100644
--- a/2021/Util.hs
+++ b/2021/Util.hs
@@ -1,5 +1,6 @@
-module Util where
+module Util (module Util, toList) where
+import Data.Foldable (toList)
import Data.List
import Data.List.NonEmpty (NonEmpty(..), (<|))