X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=src%2Fadvent15%2Fadvent15.hs;h=4b16e08254898e636cc7b8befd6da560c4f56189;hb=7bd53fa28f55dc6264d383deb23090799d21dd0c;hp=6ee03c04cf0c6a6b53cefd98d10cc954cd772c3a;hpb=df0593061898494af0b96bf6a620d8efdda2fe0c;p=advent-of-code-17.git diff --git a/src/advent15/advent15.hs b/src/advent15/advent15.hs index 6ee03c0..4b16e08 100644 --- a/src/advent15/advent15.hs +++ b/src/advent15/advent15.hs @@ -13,8 +13,8 @@ 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 + where fsA = stream' 4 generatorA generatorAStart -- filteredStream 3 streamA + fsB = stream' 8 generatorB generatorBStart -- filteredStream 7 streamB generatorA = generator 2147483647 16807 @@ -23,14 +23,19 @@ generatorB = generator 2147483647 48271 streamA = stream generatorA generatorAStart streamB = stream generatorB generatorBStart -generator :: Word64 -> Word64 -> Word64 -> Word64 +generator :: Int -> Int -> Int -> Int generator divisor factor n = n * factor `rem` divisor -toWord16 :: Word64 -> Word16 +toWord16 :: Int -> Word16 toWord16 = fromIntegral -stream :: (Word64 -> Word64) -> Word64 -> [Word16] +stream :: (Int -> Int) -> Int -> [Word16] stream gen n0 = map toWord16 $ drop 1 $ iterate gen n0 -filteredStream :: Word16 -> [Word16] -> [Word16] -filteredStream f str = filter ((== 0) . ( .&. f)) str +stream' :: Int -> (Int -> Int) -> Int -> [Word16] +stream' f gen n0 = map toWord16 $ filter ((== 0) . (`mod` f)) $ drop 1 $ iterate gen n0 + + +-- filteredStream :: Word16 -> [Word16] -> [Word16] +-- filteredStream f = filter ((== 0) . ( .&. f)) +