Update day 19.
This commit is contained in:
@@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user