AOC19 part 2
authorJustin Worthe <justin.worthe@gmail.com>
Mon, 19 Dec 2016 08:42:58 +0000 (10:42 +0200)
committerJustin Worthe <justin.worthe@gmail.com>
Mon, 19 Dec 2016 08:42:58 +0000 (10:42 +0200)
Works, but the performance is awful. There must be a better way.

aoc19/src/main.rs

index f76fce9..1930d8d 100644 (file)
@@ -1,4 +1,9 @@
 fn main() {
+    part1();
+    part2();
+}
+
+fn part1() {
     let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>();
 
     let mut eliminate_mod = 1;
@@ -14,5 +19,24 @@ fn main() {
     }
 
     let elf = elves[0];
-    println!("Elf {} gets all the presents", elf);
+    println!("Elf {} gets all the presents in part 1", elf);
+}
+
+fn part2() {
+    let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>();
+
+    let mut i = 0;
+    while elves.len() > 1 {
+        i = i % elves.len();
+        let to_eliminate = (i + elves.len() / 2) % elves.len();
+//        println!("Elf {} is taking presents from elf {}", elves[i], elves[to_eliminate]);
+        elves.remove(to_eliminate);
+        if to_eliminate > i {
+            i += 1;
+        }
+    }
+
+    let elf = elves[0];
+    println!("Elf {} gets all the presents in part 2", elf);
+
 }