1
0

day 22 part 2 performance mooooore

This commit is contained in:
2025-07-30 22:39:25 +02:00
parent c38977eb15
commit 06c2ceb96c

View File

@@ -49,46 +49,23 @@ fn part2(input: &str) -> RiddleResult {
.map(|s| generate(s)) .map(|s| generate(s))
.collect_vec(); .collect_vec();
let best = deltas let mut best = HashMap::new();
.iter() deltas.into_iter().for_each(|monkey| {
.map(|monkey| { let mut seen = HashSet::new();
let mut result: HashMap<(i64, i64, i64, i64), i64> = HashMap::new();
for (a, b, c, d) in monkey.iter().tuple_windows() { for (a, b, c, d) in monkey.iter().tuple_windows() {
let t = (a.delta, b.delta, c.delta, d.delta); let t = (a.delta, b.delta, c.delta, d.delta);
if !result.contains_key(&t) { if !seen.contains(&t) {
result.insert(t, d.price); seen.insert(t);
if !best.contains_key(&t) {
best.insert(t, 0);
} }
best.entry(t).and_modify(|v| *v += d.price);
} }
result
})
.collect_vec();
let mut all_quadruples = HashSet::new();
for map in &best {
for &seq in map.keys() {
all_quadruples.insert(seq);
} }
} });
println!(
"we have {} different sequences to check",
all_quadruples.len()
);
all_quadruples best.into_values().max().unwrap()
.into_iter()
.enumerate()
.map(|(n, seq)| {
if n % 100 == 0 {
println!("{n}");
}
best.iter()
.map(|monkey_best| monkey_best.get(&seq).unwrap_or(&0))
.sum()
})
.max()
.unwrap()
} }
fn generate(start: i64) -> Vec<Foo> { fn generate(start: i64) -> Vec<Foo> {