day 15 solutions (brute force, slow)

Signed-off-by: Stephen Waits <swaits@amazon.com>
This commit is contained in:
Stephen Waits committed 2020-12-15 07:44:57 -08:00
1 parent e56dff5a12
commit cd1f769de9
5 files changed
+47 -1

No files matched your search

+1
View File
@@ -0,0 +1 @@
15,5,1,4,7,0
+2
View File
@@ -0,0 +1,2 @@
1259
689
+1 -1
View File
@@ -1,4 +1,4 @@
// ==== day 12
// ==== day 14
use crate::utils;
use anyhow::Result;
+41
View File
@@ -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))
}
+2
View File
@@ -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(())
}