From 09ca512fcc9c853ed586ff1b420f49d9a185b972 Mon Sep 17 00:00:00 2001 From: Keenan Tims Date: Mon, 8 Dec 2025 01:50:39 -0800 Subject: [PATCH] day8: some cleanups --- .aoc_tiles/tiles/2025/08.png | Bin 0 -> 7752 bytes README.md | 5 ++++- src/day8.rs | 22 ++++++++-------------- 3 files changed, 12 insertions(+), 15 deletions(-) create mode 100644 .aoc_tiles/tiles/2025/08.png diff --git a/.aoc_tiles/tiles/2025/08.png b/.aoc_tiles/tiles/2025/08.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4293a89bd4f6895f115bb23d78ac402d09a8d2 GIT binary patch literal 7752 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 O0000

- 2025 - 14 ⭐ - Rust + 2025 - 16 ⭐ - Rust

@@ -23,4 +23,7 @@ + + + diff --git a/src/day8.rs b/src/day8.rs index 9486089..6e6f24e 100644 --- a/src/day8.rs +++ b/src/day8.rs @@ -10,7 +10,7 @@ struct Junction { fn distance(a: &Junction, b: &Junction) -> f64 { if a.pos == b.pos { - f64::MAX // ugh + 0f64 } else { (((a.pos.0 - b.pos.0).pow(2) + (a.pos.1 - b.pos.1).pow(2) + (a.pos.2 - b.pos.2).pow(2)) as f64) @@ -52,12 +52,13 @@ struct Circuits { } impl Circuits { - fn find_circuit(&self, junction: usize) -> Option { + fn find_circuit(&self, junction: usize) -> usize { self.circuits .iter() .enumerate() .find(|(_i, c)| c.contains(&junction)) .map(|(i, _c)| i) + .unwrap() } fn merge_circuits(&mut self, a: usize, b: usize) { if a == b { @@ -73,14 +74,7 @@ impl Circuits { let a_circuit = self.find_circuit(a); let b_circuit = self.find_circuit(b); - match (a_circuit, b_circuit) { - (None, None) => self.circuits.push(vec![a, b]), // both are unconnected - (Some(a_circuit), Some(b_circuit)) => { - self.merge_circuits(a_circuit, b_circuit); // both are already in circuits, merge them - } - (Some(a_circuit), None) => self.circuits[a_circuit].push(b), // one is in a circuit, so add the other to the existing circuit - (None, Some(b_circuit)) => self.circuits[b_circuit].push(a), - }; + self.merge_circuits(a_circuit, b_circuit); // both are already in circuits, merge them } } @@ -89,8 +83,8 @@ fn parse(input: &str) -> Circuits { let junctions = input.lines().map(|l| l.into()).collect_vec(); Circuits { + circuits: Vec::from_iter((0..junctions.len()).map(|i| vec![i])), junctions, - circuits: Vec::new(), } } @@ -100,8 +94,8 @@ fn part1_impl(input: &Circuits, n: usize) -> u64 { .junctions .iter() .enumerate() - .combinations(2) - .map(|p| (p[0].0, p[1].0, p[0].1.distance(p[1].1))) + .tuple_combinations() + .map(|((a_pos, a), (b_pos, b))| (a_pos, b_pos, a.distance(b))) .sorted_by(|a, b| a.2.partial_cmp(&b.2).unwrap()) .take(n) { @@ -127,7 +121,7 @@ fn part1(input: &Circuits) -> u64 { #[aoc(day8, part2)] fn part2(input: &Circuits) -> u64 { let mut circuits = input.clone(); - circuits.circuits = Vec::from_iter((0..circuits.junctions.len()).map(|i| vec![i])); + for (a, b, _d) in circuits .junctions .iter()