1+ use std:: cmp:: min;
12use std:: collections:: HashMap ;
23use rayon:: iter:: { IntoParallelRefIterator , ParallelIterator } ;
34use std:: str:: FromStr ;
@@ -52,14 +53,16 @@ impl Machine {
5253
5354 fn fewest_presses_for_joltage ( & self ) -> usize {
5455 let mut cache = HashMap :: new ( ) ;
55- self . fewest_presses_for_joltage_from ( vec ! [ 0 ; self . joltage_reqs. len( ) ] , 0 , usize:: MAX , & mut cache)
56+ let presses = self . fewest_presses_for_joltage_from ( vec ! [ 0 ; self . joltage_reqs. len( ) ] , 0 , usize:: MAX , & mut cache) ;
57+ println ! ( "{presses}" ) ;
58+ presses
5659 }
5760
58- fn fewest_presses_for_joltage_from ( & self , cur : Vec < usize > , steps : usize , max_steps : usize , cache : & mut HashMap < Vec < usize > , usize > ) -> usize {
61+ fn fewest_presses_for_joltage_from ( & self , cur : Vec < usize > , steps : usize , max_steps : usize , _cache : & mut HashMap < Vec < usize > , usize > ) -> usize {
5962 if * cur == self . joltage_reqs {
6063 return steps;
61- } else if let Some ( presses) = cache. get ( & cur) {
62- return * presses;
64+ // } else if let Some(presses) = cache.get(&cur) {
65+ // return *presses;
6366 } else if steps == max_steps || cur. iter ( ) . zip ( self . joltage_reqs . iter ( ) ) . any ( |( cur, req) | * cur > * req) {
6467 return max_steps;
6568 }
@@ -71,9 +74,10 @@ impl Machine {
7174 for w in wiring {
7275 next[ * w] += 1 ;
7376 }
74- self . fewest_presses_for_joltage_from ( next, steps + 1 , max, cache)
77+ let next_presses = self . fewest_presses_for_joltage_from ( next, steps + 1 , max, _cache) ;
78+ min ( max, next_presses)
7579 } ) ;
76- cache. insert ( cur, presses) ;
80+ // cache.insert(cur, presses);
7781 presses
7882 }
7983}
0 commit comments