2016/19
This commit is contained in:
4
2016/19/Cargo.lock
generated
Normal file
4
2016/19/Cargo.lock
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
[root]
|
||||
name = "19"
|
||||
version = "0.1.0"
|
||||
|
||||
6
2016/19/Cargo.toml
Normal file
6
2016/19/Cargo.toml
Normal 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
50
2016/19/src/main.rs
Normal 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]);
|
||||
}
|
||||
Reference in New Issue
Block a user