summary refs log tree commit diff homepage
path: root/2016/src/bin/day19.rs
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2017-11-27 17:11:18 -0500
committerJune McEnroe <june@causal.agency>2020-11-22 00:14:25 -0500
commit051be932a389b8bc3ea5d4626575454844639066 (patch)
tree9383502b3205624f7aee8faa014228036b5450f9 /2016/src/bin/day19.rs
parentLicense ISC (diff)
downloadaoc-051be932a389b8bc3ea5d4626575454844639066.tar.gz
aoc-051be932a389b8bc3ea5d4626575454844639066.zip
Move to 2016 directory
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));
+}