diff options
author | June McEnroe <programble@gmail.com> | 2016-12-20 20:16:07 -0500 |
---|---|---|
committer | June McEnroe <programble@gmail.com> | 2016-12-20 20:16:07 -0500 |
commit | 4d8d30e54d2b0b3181863b825f9c7813676acc0a (patch) | |
tree | ac012698243403f5e02f2481708d4a0b67761a11 /src | |
parent | Fuck day 11 part 2 (diff) | |
download | aoc-4d8d30e54d2b0b3181863b825f9c7813676acc0a.tar.gz aoc-4d8d30e54d2b0b3181863b825f9c7813676acc0a.zip |
Day 19
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/day19.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/bin/day19.rs b/src/bin/day19.rs new file mode 100644 index 0000000..89013b3 --- /dev/null +++ b/src/bin/day19.rs @@ -0,0 +1,37 @@ +use std::io::{self, Read}; + +#[derive(Clone, Copy)] +struct Elf { + gifts: usize, + next: usize, +} + +fn solve(count: usize) -> usize { + let mut circle: Vec<Elf> = (0..count).map(|i| Elf { gifts: 1, next: i + 1 }).collect(); + circle.last_mut().unwrap().next = 0; + + let mut index = 0; + + while circle[index].gifts < count { + let next = circle[index].next; + circle[index].gifts += circle[next].gifts; + circle[next].gifts = 0; + circle[index].next = circle[next].next; + + index = circle[index].next; + } + + index + 1 +} + +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)); +} |