summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--22-1.hs18
1 files changed, 18 insertions, 0 deletions
diff --git a/22-1.hs b/22-1.hs
new file mode 100644
index 0000000..f8d7117
--- /dev/null
+++ b/22-1.hs
@@ -0,0 +1,18 @@
+import Data.Bits (xor)
+import Data.Function ((&))
+
+mix :: Int -> Int -> Int
+mix = xor
+
+prune :: Int -> Int
+prune = (`mod` 16777216)
+
+mp :: Int -> Int -> Int
+mp cur = prune . mix cur
+
+update :: Int -> Int
+update x = mp x (x * 64) & \ y -> mp y (y `div` 32) & \ z -> mp z (z * 2048)
+
+main :: IO ()
+main = getContents
+ >>= print . sum . map ((!! 2000) . iterate update . read) . lines