summary refs log tree commit diff homepage
path: root/2016/src/bin/day19.rs
diff options
context:
space:
mode:
Diffstat (limited to '2016/src/bin/day19.rs')
-rw-r--r--2016/src/bin/day19.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/2016/src/bin/day19.rs b/2016/src/bin/day19.rs
new file mode 100644
index 0000000..9afbf39
--- /dev/null
+++ b/2016/src/bin/day19.rs
@@ -0,0 +1,35 @@
+use std::collections::VecDeque;
+use std::io::{self, Read};
+
+#[derive(Clone, Copy)]
+struct Elf {
+    position: usize,
+    gifts: usize,
+}
+
+fn solve(count: usize) -> usize {
+    let mut circle: VecDeque<Elf> = (0..count)
+        .map(|i| Elf { position: i + 1, gifts: 1 })
+        .collect();
+
+    while circle.len() > 1 {
+        let mut current = circle.pop_front().unwrap();
+        let next = circle.pop_front().unwrap();
+        current.gifts += next.gifts;
+        circle.push_back(current);
+    }
+
+    circle.pop_front().unwrap().position
+}
+
+fn main() {
+    let mut input = String::new();
+    io::stdin().read_to_string(&mut input).unwrap();
+
+    println!("Part 1: {}", solve(input.trim().parse().unwrap()));
+}
+
+#[test]
+fn part1() {
+    assert_eq!(3, solve(5));
+}