Update day 19.

This commit is contained in:
2017-02-03 09:48:25 +01:00
parent 9ce16b772f
commit 16636774b6

View File

@@ -1,14 +1,10 @@
use std::collections::VecDeque; use std::collections::VecDeque;
fn main() { pub fn steal_left(elf_count: usize) -> usize {
let input = 3018458;
// Part 1.
let mut elfs = Vec::new(); let mut elfs = Vec::new();
for i in 1..input + 1 { for i in 1..elf_count + 1 {
elfs.push(i); elfs.push(i);
} }
@@ -26,25 +22,80 @@ fn main() {
} }
} }
println!("winner={:?}", elfs[0]); elfs[0]
}
pub fn steal_across(elf_count: usize) -> usize {
// Part 2.
let mut elfs = VecDeque::new(); let mut elfs = VecDeque::new();
for i in 1..input + 1 { for i in 1..elf_count + 1 {
elfs.push_back(i); elfs.push_back(i);
} }
while elfs.len() > 1 { while elfs.len() > 1 {
let buddy = elfs.len() / 2; let buddy = elfs.len() / 2;
elfs.remove(buddy); let b = elfs.remove(buddy);
let elf = elfs.pop_front().unwrap(); let elf = elfs.pop_front().unwrap();
println!("{} ! {}", elf, b.unwrap());
elfs.push_back(elf); elfs.push_back(elf);
} }
println!("winner={:?}", elfs[0]); elfs[0]
}
pub fn steal_across_v2(elf_count: usize) -> usize {
let mut elfs = Vec::new();
for i in 1..elf_count + 1 {
elfs.push(i);
}
elfs[0]
}
fn main() {
let input = 3018458;
// Part 1.
println!("winner={:?}", steal_left(input));
// Part 2.
println!("winner={:?}", steal_across(25));
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_steal_left() {
assert_eq!(3, steal_left(5));
assert_eq!(489, steal_left(500));
assert_eq!(977, steal_left(1_000));
assert_eq!(953, steal_left(1_500));
}
#[test]
fn test_steal_across() {
assert_eq!(2, steal_across(5));
assert_eq!(271, steal_across(500));
assert_eq!(271, steal_across(1_000));
assert_eq!(813, steal_across(1_500));
}
#[test]
fn test_steal_across_v2() {
assert_eq!(2, steal_across_v2(5));
assert_eq!(271, steal_across_v2(500));
assert_eq!(271, steal_across_v2(1_000));
assert_eq!(813, steal_across_v2(1_500));
}
} }