day 22 part 2 performance mooooore
This commit is contained in:
45
src/day22.rs
45
src/day22.rs
@@ -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();
|
best.into_values().max().unwrap()
|
||||||
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
|
|
||||||
.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> {
|
||||||
|
|||||||
Reference in New Issue
Block a user