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