Skip to content

Commit 568742c

Browse files
committed
chore: tidy
1 parent 2eb8dd5 commit 568742c

File tree

1 file changed

+57
-30
lines changed

1 file changed

+57
-30
lines changed

aoclp_solutions/src/y2025/day_10.rs

Lines changed: 57 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
use std::cmp::min;
22
use std::collections::HashMap;
3-
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
43
use std::str::FromStr;
54
use std::sync::OnceLock;
6-
use itertools::Itertools;
5+
76
use aoclp::anyhow::Context;
87
use aoclp::regex::Regex;
98
use aoclp::solvers_impl::input::safe_get_input_as_many;
9+
use itertools::Itertools;
10+
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
1011

1112
pub fn part_1() -> usize {
1213
input().iter().map(Machine::fewest_presses_for_lights).sum()
1314
}
1415

1516
pub fn part_2() -> usize {
16-
input().par_iter().map(Machine::fewest_presses_for_joltage).sum()
17+
input()
18+
.par_iter()
19+
.map(Machine::fewest_presses_for_joltage)
20+
.sum()
1721
}
1822

1923
#[derive(Debug, Clone)]
@@ -35,15 +39,13 @@ impl Machine {
3539
states = states
3640
.into_iter()
3741
.flat_map(|l| {
38-
self.button_wirings
39-
.iter()
40-
.map(move |wiring| {
41-
let mut next = l.clone();
42-
for w in wiring {
43-
next[*w] = !next[*w]
44-
}
45-
next
46-
})
42+
self.button_wirings.iter().map(move |wiring| {
43+
let mut next = l.clone();
44+
for w in wiring {
45+
next[*w] = !next[*w]
46+
}
47+
next
48+
})
4749
})
4850
.unique()
4951
.collect();
@@ -53,30 +55,44 @@ impl Machine {
5355

5456
fn fewest_presses_for_joltage(&self) -> usize {
5557
let mut cache = HashMap::new();
56-
let presses = self.fewest_presses_for_joltage_from(vec![0; self.joltage_reqs.len()], 0, usize::MAX, &mut cache);
58+
let presses = self.fewest_presses_for_joltage_from(
59+
vec![0; self.joltage_reqs.len()],
60+
0,
61+
usize::MAX,
62+
&mut cache,
63+
);
5764
println!("{presses}");
5865
presses
5966
}
6067

61-
fn fewest_presses_for_joltage_from(&self, cur: Vec<usize>, steps: usize, max_steps: usize, _cache: &mut HashMap<Vec<usize>, usize>) -> usize {
68+
fn fewest_presses_for_joltage_from(
69+
&self,
70+
cur: Vec<usize>,
71+
steps: usize,
72+
max_steps: usize,
73+
_cache: &mut HashMap<Vec<usize>, usize>,
74+
) -> usize {
6275
if *cur == self.joltage_reqs {
6376
return steps;
6477
// } else if let Some(presses) = cache.get(&cur) {
6578
// return *presses;
66-
} else if steps == max_steps || cur.iter().zip(self.joltage_reqs.iter()).any(|(cur, req)| *cur > *req) {
79+
} else if steps == max_steps
80+
|| cur
81+
.iter()
82+
.zip(self.joltage_reqs.iter())
83+
.any(|(cur, req)| *cur > *req)
84+
{
6785
return max_steps;
6886
}
6987

70-
let presses = self.button_wirings
71-
.iter()
72-
.fold(max_steps, |max, wiring| {
73-
let mut next = cur.clone();
74-
for w in wiring {
75-
next[*w] += 1;
76-
}
77-
let next_presses = self.fewest_presses_for_joltage_from(next, steps + 1, max, _cache);
78-
min(max, next_presses)
79-
});
88+
let presses = self.button_wirings.iter().fold(max_steps, |max, wiring| {
89+
let mut next = cur.clone();
90+
for w in wiring {
91+
next[*w] += 1;
92+
}
93+
let next_presses = self.fewest_presses_for_joltage_from(next, steps + 1, max, _cache);
94+
min(max, next_presses)
95+
});
8096
// cache.insert(cur, presses);
8197
presses
8298
}
@@ -91,16 +107,27 @@ impl FromStr for Machine {
91107
Regex::new(r"^\s*\[(?<lights>[.#]+)]\s+(?<buttons>(?:\((?:\d+,?)+\)\s+)+)\s*\{(?<joltage>(?:\d+,?)+)}\s*$").unwrap()
92108
});
93109

94-
let captures = re.captures(s).with_context(|| format!("invalid machine spec: {s}"))?;
110+
let captures = re
111+
.captures(s)
112+
.with_context(|| format!("invalid machine spec: {s}"))?;
95113
let target_lights = &captures["lights"];
96114
let button_wirings = &captures["buttons"];
97115
let joltage_reqs = &captures["joltage"];
98116

99117
let target_lights = target_lights.chars().map(|c| c == '#').collect();
100-
let button_wirings = button_wirings.split_ascii_whitespace().map(|bw| {
101-
bw[1..bw.len() - 1].split(',').map(|l| l.parse::<usize>()).try_collect()
102-
}).try_collect()?;
103-
let joltage_reqs = joltage_reqs.split(',').map(|j| j.parse::<usize>()).try_collect()?;
118+
let button_wirings = button_wirings
119+
.split_ascii_whitespace()
120+
.map(|bw| {
121+
bw[1..bw.len() - 1]
122+
.split(',')
123+
.map(|l| l.parse::<usize>())
124+
.try_collect()
125+
})
126+
.try_collect()?;
127+
let joltage_reqs = joltage_reqs
128+
.split(',')
129+
.map(|j| j.parse::<usize>())
130+
.try_collect()?;
104131

105132
Ok(Self { target_lights, button_wirings, joltage_reqs })
106133
}

0 commit comments

Comments
 (0)