Advent of Code solutions

Day 11: go-go gadget 'a

bwc9876.dev 95726946 11bb1d95

verified
+16 -12
+16 -12
years/2025/src/day_11.rs
··· 5 5 pub struct Day11; 6 6 7 7 type Graph = HashMap<String, Vec<String>>; 8 - type Seen = HashMap<(String, bool, bool), usize>; 8 + type Seen<'a> = HashMap<(&'a String, bool, bool), usize>; 9 9 10 - fn all_paths_to_out(node: &String, graph: &Graph, seen: &mut HashMap<String, usize>) -> usize { 11 - if let Some(memo) = seen.get(node).copied() { 12 - memo 10 + fn all_paths_to_out<'a>( 11 + node: &'a String, 12 + graph: &'a Graph, 13 + seen: &mut HashMap<&'a String, usize>, 14 + ) -> usize { 15 + if let Some(memo) = seen.get(&node) { 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 - seen.insert(node.clone(), amnt); 26 + seen.insert(node, amnt); 23 27 amnt 24 28 } else { 25 29 0 26 30 } 27 31 } 28 32 29 - fn all_paths_to_out_with_constraints( 30 - node: &String, 33 + fn all_paths_to_out_with_constraints<'a>( 34 + node: &'a String, 31 35 saw_dac: bool, 32 36 saw_fft: bool, 33 - graph: &Graph, 34 - seen: &mut Seen, 37 + graph: &'a Graph, 38 + seen: &mut Seen<'a>, 35 39 ) -> usize { 36 - if let Some(memo) = seen.get(&(node.clone(), saw_dac, saw_fft)).copied() { 37 - memo 40 + if let Some(memo) = seen.get(&(node, saw_dac, saw_fft)) { 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 - seen.insert((node.clone(), saw_dac, saw_fft), amnt); 59 + seen.insert((node, saw_dac, saw_fft), amnt); 56 60 amnt 57 61 } else { 58 62 0