X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=adventofcode1619%2Fapp%2Fadvent19.hs;fp=adventofcode1619%2Fapp%2Fadvent19.hs;h=009a07c15d5c13d7c17c392eb687fa4bc696b0da;hb=245aed74ce202a0be5cf2f61f79b48ed51aa0e62;hp=0000000000000000000000000000000000000000;hpb=474b47bdae540d9e3e3a31a6fd9fbaf450dcc395;p=advent-of-code-16.git

diff --git a/adventofcode1619/app/advent19.hs b/adventofcode1619/app/advent19.hs
new file mode 100644
index 0000000..009a07c
--- /dev/null
+++ b/adventofcode1619/app/advent19.hs
@@ -0,0 +1,37 @@
+module Main(main) where
+
+import Prelude hiding (length, take, drop)
+import Data.Sequence
+
+-- input = 5 
+input = 3012210 
+
+main :: IO ()
+main = do 
+    part1 
+    part2
+
+part1 :: IO ()
+part1 = print $ 2 * (input - 2 ^ (toInteger (floor $ logBase 2 (fromIntegral input)))) + 1
+
+part2 :: IO ()
+part2 = print $ flip index 0 $ presentSteps initial
+
+presentSteps :: Seq Int -> Seq Int
+presentSteps elves 
+    | isFinished elves = elves
+    | otherwise = presentSteps $ next elves
+
+initial :: Seq Int
+initial = fromList [1..input] 
+
+isFinished :: Seq Int -> Bool
+isFinished elves = length elves == 1
+
+next :: Seq Int -> Seq Int
+next elves = prefix >< (midfix |> suffix)
+    where 
+        target = length elves `quot` 2
+        prefix = drop 1 $ take target elves
+        midfix = drop (target+1) elves
+        suffix = index elves 0