From 09f781d9e52b3c0e9efae5e37a8e7f21058e104a Mon Sep 17 00:00:00 2001 From: logaritmisk Date: Thu, 22 Dec 2016 00:25:32 +0100 Subject: [PATCH] 2016/19 --- 2016/19/Cargo.lock | 4 ++++ 2016/19/Cargo.toml | 6 ++++++ 2016/19/src/main.rs | 50 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 2016/19/Cargo.lock create mode 100644 2016/19/Cargo.toml create mode 100644 2016/19/src/main.rs 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]); +}