diff --git a/2016/19/Cargo.lock b/2016/19/Cargo.lock new file mode 100644 index 0000000..0ff5b3f --- /dev/null +++ b/2016/19/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "19" +version = "0.1.0" + diff --git a/2016/19/Cargo.toml b/2016/19/Cargo.toml new file mode 100644 index 0000000..1165dc6 --- /dev/null +++ b/2016/19/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "19" +version = "0.1.0" +authors = ["logaritmisk "] + +[dependencies] diff --git a/2016/19/src/main.rs b/2016/19/src/main.rs new file mode 100644 index 0000000..1c64250 --- /dev/null +++ b/2016/19/src/main.rs @@ -0,0 +1,50 @@ +use std::collections::VecDeque; + + +fn main() { + let input = 3018458; + + + // Part 1. + let mut elfs = Vec::new(); + + for i in 1..input + 1 { + elfs.push(i); + } + + while elfs.len() > 1 { + let odd = elfs.len() % 2 != 0; + + elfs = elfs.iter() + .enumerate() + .filter(|&(i, _)| i % 2 == 0) + .map(|(_, e)| *e) + .collect(); + + if elfs.len() > 1 && odd { + elfs.remove(0); + } + } + + println!("winner={:?}", elfs[0]); + + + // Part 2. + let mut elfs = VecDeque::new(); + + for i in 1..input + 1 { + elfs.push_back(i); + } + + while elfs.len() > 1 { + let buddy = elfs.len() / 2; + + elfs.remove(buddy); + + let elf = elfs.pop_front().unwrap(); + + elfs.push_back(elf); + } + + println!("winner={:?}", elfs[0]); +}