From 8c64712575451975c0418958d97687229a983741 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sun, 17 Dec 2017 11:19:35 +0100 Subject: finished Day 17 part1 - part 2 crashes the computer --- .Puzzle17.hs.swp | Bin 0 -> 12288 bytes Puzzle17 | Bin 0 -> 21872 bytes Puzzle17.hi | Bin 0 -> 1162 bytes Puzzle17.hs | 28 ++++++++++++++++++++++++++++ Puzzle17.o | Bin 0 -> 8432 bytes 5 files changed, 28 insertions(+) create mode 100644 .Puzzle17.hs.swp create mode 100755 Puzzle17 create mode 100644 Puzzle17.hi create mode 100644 Puzzle17.hs create mode 100644 Puzzle17.o diff --git a/.Puzzle17.hs.swp b/.Puzzle17.hs.swp new file mode 100644 index 0000000..4873b94 Binary files /dev/null and b/.Puzzle17.hs.swp differ diff --git a/Puzzle17 b/Puzzle17 new file mode 100755 index 0000000..79e5c36 Binary files /dev/null and b/Puzzle17 differ diff --git a/Puzzle17.hi b/Puzzle17.hi new file mode 100644 index 0000000..070faf5 Binary files /dev/null and b/Puzzle17.hi differ diff --git a/Puzzle17.hs b/Puzzle17.hs new file mode 100644 index 0000000..ff2d0d7 --- /dev/null +++ b/Puzzle17.hs @@ -0,0 +1,28 @@ +insert :: Int -> Int -> [Int] -> [Int] +insert k x xs = let (ys, zs) = splitAt k xs in ys ++ (x:zs) + +step :: Int -> ([Int], Int, Int) -> ([Int], Int, Int) +step n (xs, pos, l) = let newpos = (pos + n) `rem` l + 1 in (insert newpos l xs, newpos, l + 1) + +step' :: Int -> (Int, Int, Int) -> (Int, Int, Int) +step' n (x, pos, l) = let newpos = (pos + n) `rem` l + 1 in + (if newpos == 1 then l else x, newpos, l + 1) + +f :: Int -> Int -> ([Int], Int, Int) +f n m = foldl1 (.) (replicate m (step n)) ([0], 0, 1) + +f' :: Int -> Int -> (Int, Int, Int) +f' n m = foldl1 (.) (replicate m (step' n)) (-1, 0, 1) + +solve1 :: Int -> Int +solve1 n = let (xs, pos, l) = f n 2017 in xs !! (pos + 1) + +solve2 :: Int -> Int +solve2 n = let (x, pos, l) = f' n 50000000 in x + +input0 :: Int +input0 = 3 +input :: Int +input = 354 + +main = (putStrLn . show . solve2) input diff --git a/Puzzle17.o b/Puzzle17.o new file mode 100644 index 0000000..76d835f Binary files /dev/null and b/Puzzle17.o differ -- cgit v1.2.3