tangled
alpha
login
or
join now
bwc9876.dev
/
advent
0
fork
atom
Advent of Code solutions
0
fork
atom
overview
issues
pulls
pipelines
Day 11: go-go gadget 'a
bwc9876.dev
3 months ago
95726946
11bb1d95
verified
This commit was signed with the committer's
known signature
.
bwc9876.dev
SSH Key Fingerprint:
SHA256:DanMEP/RNlSC7pAVbnXO6wzQV00rqyKj053tz4uH5gQ=
+16
-12
1 changed file
expand all
collapse all
unified
split
years
2025
src
day_11.rs
+16
-12
years/2025/src/day_11.rs
···
5
5
pub struct Day11;
6
6
7
7
type Graph = HashMap<String, Vec<String>>;
8
8
-
type Seen = HashMap<(String, bool, bool), usize>;
8
8
+
type Seen<'a> = HashMap<(&'a String, bool, bool), usize>;
9
9
10
10
-
fn all_paths_to_out(node: &String, graph: &Graph, seen: &mut HashMap<String, usize>) -> usize {
11
11
-
if let Some(memo) = seen.get(node).copied() {
12
12
-
memo
10
10
+
fn all_paths_to_out<'a>(
11
11
+
node: &'a String,
12
12
+
graph: &'a Graph,
13
13
+
seen: &mut HashMap<&'a String, usize>,
14
14
+
) -> usize {
15
15
+
if let Some(memo) = seen.get(&node) {
16
16
+
*memo
13
17
} else if let Some(nexts) = graph.get(node) {
14
18
let mut amnt = 0;
15
19
for next in nexts.iter() {
···
19
23
amnt += all_paths_to_out(next, graph, seen);
20
24
}
21
25
}
22
22
-
seen.insert(node.clone(), amnt);
26
26
+
seen.insert(node, amnt);
23
27
amnt
24
28
} else {
25
29
0
26
30
}
27
31
}
28
32
29
29
-
fn all_paths_to_out_with_constraints(
30
30
-
node: &String,
33
33
+
fn all_paths_to_out_with_constraints<'a>(
34
34
+
node: &'a String,
31
35
saw_dac: bool,
32
36
saw_fft: bool,
33
33
-
graph: &Graph,
34
34
-
seen: &mut Seen,
37
37
+
graph: &'a Graph,
38
38
+
seen: &mut Seen<'a>,
35
39
) -> usize {
36
36
-
if let Some(memo) = seen.get(&(node.clone(), saw_dac, saw_fft)).copied() {
37
37
-
memo
40
40
+
if let Some(memo) = seen.get(&(node, saw_dac, saw_fft)) {
41
41
+
*memo
38
42
} else if let Some(nexts) = graph.get(node) {
39
43
let mut amnt = 0;
40
44
for next in nexts.iter() {
···
52
56
);
53
57
}
54
58
}
55
55
-
seen.insert((node.clone(), saw_dac, saw_fft), amnt);
59
59
+
seen.insert((node, saw_dac, saw_fft), amnt);
56
60
amnt
57
61
} else {
58
62
0