This commit is contained in:
Jana Dönszelmann 2026-01-02 16:14:01 +01:00
parent 82fbdec1c7
commit 37b01f2102
No known key found for this signature in database

View file

@ -326,18 +326,38 @@ impl<const TOWER_HEIGHT: usize> Game<TOWER_HEIGHT> {
.all(|x| x.is_some() && x == &tower.rings[0]) .all(|x| x.is_some() && x == &tower.rings[0])
} }
let hash_state = |s: &[Tower<TOWER_HEIGHT>]| { let hash_state = |towers: &[Tower<TOWER_HEIGHT>]| {
let mut hasher = DefaultHasher::default(); let mut hasher = DefaultHasher::default();
let num_finished_towers = s.iter().filter(|i| tower_solved(*i)).count(); let num_finished_towers = towers.iter().filter(|i| tower_solved(*i)).count();
num_finished_towers.hash(&mut hasher); num_finished_towers.hash(&mut hasher);
let mut filtered_towers = towers
for x in s
.iter() .iter()
.filter(|i| !tower_solved(i) && i.height() != 0) .filter(|i| !tower_solved(i) && i.height() != 0)
.enumerate() .enumerate()
{ .collect::<Vec<_>>();
filtered_towers.sort_by_cached_key(|(index, tower)| {
let mut rings = [0; TOWER_HEIGHT];
let mut count = 0;
for (idx, ring) in tower.rings.iter().copied().enumerate() {
let Some(ring) = ring else { break };
if rings[idx] == 0 {
count += 1;
for (j, ring2) in tower.rings[idx..].iter().copied().enumerate() {
if ring2 == Some(ring) {
rings[j] = count;
}
}
}
}
(rings, *index)
});
for x in filtered_towers.into_iter().map(|(_, x)| x).enumerate() {
x.hash(&mut hasher); x.hash(&mut hasher);
} }