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 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 day12;
|
||||
mod day14;
|
||||
mod day15;
|
||||
mod utils;
|
||||
|
||||
// TODO
|
||||
@@ -39,5 +40,6 @@ fn main() -> Result<()> {
|
||||
println!("Day 11: {:?}", day11::run()?);
|
||||
println!("Day 12: {:?}", day12::run()?);
|
||||
println!("Day 14: {:?}", day14::run()?);
|
||||
println!("Day 15: {:?}", day15::run()?);
|
||||
Ok(())
|
||||
}
|
||||
Reference in new issue
Block a user