diff options
| author | June McEnroe <programble@gmail.com> | 2017-11-27 17:11:18 -0500 |
|---|---|---|
| committer | June McEnroe <june@causal.agency> | 2020-11-22 00:14:25 -0500 |
| commit | 3ab09dc3a1fb5b17e2e2f49366b847eabd56650d (patch) | |
| tree | 9e0cada410e4554c762aab558c27ba0d71e7d27c /2016/src/bin/day19.rs | |
| parent | License ISC (diff) | |
| download | aoc-3ab09dc3a1fb5b17e2e2f49366b847eabd56650d.tar.gz aoc-3ab09dc3a1fb5b17e2e2f49366b847eabd56650d.zip | |
Move to 2016 directory
Diffstat (limited to '2016/src/bin/day19.rs')
| -rw-r--r-- | 2016/src/bin/day19.rs | 35 |
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)); +} |