day 15 solutions (brute force, slow)
Signed-off-by: Stephen Waits <swaits@amazon.com>
This commit is contained in:
5 files changed
+47
-1
No files matched your search
@@ -0,0 +1 @@
|
|||||||
|
15,5,1,4,7,0
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
1259
|
||||||
|
689
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// ==== day 12
|
// ==== day 14
|
||||||
|
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
// ==== day 15
|
||||||
|
|
||||||
|
use crate::utils;
|
||||||
|
use anyhow::Result;
|
||||||
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
fn play_speaking_game(input: &[i64], n: usize) -> i64 {
|
||||||
|
let mut seen: BTreeMap<i64, usize> = BTreeMap::new();
|
||||||
|
let mut last_insert: Option<usize> = None;
|
||||||
|
|
||||||
|
input.iter().enumerate().for_each(|(i, n)| {
|
||||||
|
last_insert = seen.insert(*n, i);
|
||||||
|
});
|
||||||
|
|
||||||
|
(seen.len()..n).fold(*input.last().unwrap(), |_, step| {
|
||||||
|
let num: i64 = match last_insert {
|
||||||
|
Some(prev_step) => (step - 1 - prev_step) as i64,
|
||||||
|
None => 0_i64,
|
||||||
|
};
|
||||||
|
|
||||||
|
last_insert = seen.insert(num, step);
|
||||||
|
num
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// main
|
||||||
|
pub fn run() -> Result<(i64, i64)> {
|
||||||
|
let data: Vec<i64> = utils::read_file("data/input-15.txt")?
|
||||||
|
.trim()
|
||||||
|
.split(',')
|
||||||
|
.map(|s| s.parse::<i64>().expect("parse error"))
|
||||||
|
.collect();
|
||||||
|
let answers = utils::read_i64s("data/output-15.txt")?;
|
||||||
|
|
||||||
|
let p1 = play_speaking_game(&data, 2020);
|
||||||
|
let p2 = play_speaking_game(&data, 30000000);
|
||||||
|
|
||||||
|
assert_eq!(p1, answers[0]);
|
||||||
|
assert_eq!(p2, answers[1]);
|
||||||
|
Ok((p1, p2))
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ mod day10;
|
|||||||
mod day11;
|
mod day11;
|
||||||
mod day12;
|
mod day12;
|
||||||
mod day14;
|
mod day14;
|
||||||
|
mod day15;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
@@ -39,5 +40,6 @@ fn main() -> Result<()> {
|
|||||||
println!("Day 11: {:?}", day11::run()?);
|
println!("Day 11: {:?}", day11::run()?);
|
||||||
println!("Day 12: {:?}", day12::run()?);
|
println!("Day 12: {:?}", day12::run()?);
|
||||||
println!("Day 14: {:?}", day14::run()?);
|
println!("Day 14: {:?}", day14::run()?);
|
||||||
|
println!("Day 15: {:?}", day15::run()?);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user