This commit is contained in:
2016-12-22 00:25:32 +01:00
parent 34f5a96e1e
commit 09f781d9e5
3 changed files with 60 additions and 0 deletions

4
2016/19/Cargo.lock generated Normal file
View File

@@ -0,0 +1,4 @@
[root]
name = "19"
version = "0.1.0"

6
2016/19/Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "19"
version = "0.1.0"
authors = ["logaritmisk <anders.e.olsson@gmail.com>"]
[dependencies]

50
2016/19/src/main.rs Normal file
View File

@@ -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]);
}