X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=src%2Fadvent15%2Fadvent15.hs;fp=src%2Fadvent15%2Fadvent15.hs;h=7cec0d024da9784b39d3fc7a7d6dcafe4950d2cb;hb=cfe831809e32c1b0c9746eb9939fe0a2cd9a1d37;hp=0000000000000000000000000000000000000000;hpb=21c544baf22df89b359ae657654875bc1e2f62f9;p=advent-of-code-17.git

diff --git a/src/advent15/advent15.hs b/src/advent15/advent15.hs
new file mode 100644
index 0000000..7cec0d0
--- /dev/null
+++ b/src/advent15/advent15.hs
@@ -0,0 +1,37 @@
+import Data.Word
+import Data.Bits
+
+generatorAStart = 873
+generatorBStart = 583
+
+main :: IO ()
+main = do
+    print $ part1 
+    print $ part2 
+
+part1 = length $ filter (uncurry (==)) $ take 40000000 $ zip streamA streamB
+
+
+part2 = length $ filter (uncurry (==)) $ take 5000000 $ zip fsA fsB
+    where fsA = filteredStream 3 streamA
+          fsB = filteredStream 7 streamB
+
+
+generatorA = generator 2147483647 16807
+generatorB = generator 2147483647 48271
+
+streamA = stream generatorA generatorAStart
+streamB = stream generatorB generatorBStart
+
+generator :: Word64 -> Word64 -> Word64 -> Word64
+generator divisor factor n = fromIntegral $ fromIntegral n * factor `rem` divisor
+
+toWord16 :: Word64 -> Word16
+toWord16 = fromIntegral
+
+stream :: (Word64 -> Word64) -> Word64 -> [Word16]
+stream gen n0 = map toWord16 $ drop 1 $ iterate gen n0
+
+filteredStream :: Word16 -> [Word16] -> [Word16]
+filteredStream f str = filter (\n -> n .&. f == 0) str
+