diff --git a/15.hs b/15.hs new file mode 100644 index 0000000..c2986fb --- /dev/null +++ b/15.hs @@ -0,0 +1,21 @@ +import Data.Int (Int16) + +gen :: Int -> Int -> Int -> [Int] +gen divisor factor seed = iterate (next divisor factor) seed + where next d f i = (f * i) `mod` d + +judge :: Int -> [Int] -> [Int] -> Int +judge n a b = length . filter (uncurry eq) . take n $ zip a b + where eq i j = (fromIntegral i :: Int16) == (fromIntegral j :: Int16) + +divisible :: Int -> Int -> Bool +divisible d = (== 0) . (`mod` d) + +main :: IO () +main = do + let genA = gen 2147483647 16807 634 + genB = gen 2147483647 48271 301 + gen4A = filter (divisible 4) genA + gen8B = filter (divisible 8) genB + print $ judge 40000000 genA genB + print $ judge 5000000 gen4A gen8B \ No newline at end of file