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