From 6fc85b3d828e938dadfaadbdda58dd721f42a2bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jana=20D=C3=B6nszelmann?= Date: Fri, 2 Jan 2026 16:24:24 +0100 Subject: [PATCH] canonicalize colors --- src/main.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index db5c9db..e0df591 100644 --- a/src/main.rs +++ b/src/main.rs @@ -78,6 +78,12 @@ impl Tower { tower } + fn map(self, f: impl FnMut(Option) -> Option) -> Self { + Self { + rings: self.rings.map(f), + } + } + fn burried_score(&self) -> usize { let mut ring_type = None; let mut same_ring_type_score = 0; @@ -357,7 +363,21 @@ impl Game { (rings, *index) }); - for x in filtered_towers.into_iter().map(|(_, x)| x).enumerate() { + let mut color_assignment = [None::; 100]; + let mut num_seen = 0; + let relabelled_towers = filtered_towers.iter().map(|(_, x)| x).map(|tower| { + tower.map(|ring| { + ring.map(|ring| { + *color_assignment[ring.0.get()].get_or_insert_with(|| { + num_seen += 1; + let ring = Ring(NonZero::new(num_seen).unwrap()); + ring + }) + }) + }) + }); + + for x in relabelled_towers.into_iter().enumerate() { x.hash(&mut hasher); }