Update day 19.
This commit is contained in:
@@ -1,14 +1,10 @@
|
||||
use std::collections::VecDeque;
|
||||
|
||||
|
||||
fn main() {
|
||||
let input = 3018458;
|
||||
|
||||
|
||||
// Part 1.
|
||||
pub fn steal_left(elf_count: usize) -> usize {
|
||||
let mut elfs = Vec::new();
|
||||
|
||||
for i in 1..input + 1 {
|
||||
for i in 1..elf_count + 1 {
|
||||
elfs.push(i);
|
||||
}
|
||||
|
||||
@@ -26,25 +22,80 @@ fn main() {
|
||||
}
|
||||
}
|
||||
|
||||
println!("winner={:?}", elfs[0]);
|
||||
elfs[0]
|
||||
}
|
||||
|
||||
|
||||
// Part 2.
|
||||
pub fn steal_across(elf_count: usize) -> usize {
|
||||
let mut elfs = VecDeque::new();
|
||||
|
||||
for i in 1..input + 1 {
|
||||
for i in 1..elf_count + 1 {
|
||||
elfs.push_back(i);
|
||||
}
|
||||
|
||||
while elfs.len() > 1 {
|
||||
let buddy = elfs.len() / 2;
|
||||
|
||||
elfs.remove(buddy);
|
||||
let b = elfs.remove(buddy);
|
||||
|
||||
let elf = elfs.pop_front().unwrap();
|
||||
|
||||
println!("{} ! {}", elf, b.unwrap());
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user