@@ -11,7 +11,6 @@ fn parse_data(input: &str) -> Vec<Vec<i32>> {
1111
1212fn is_valid_pair ( x : i32 , y : i32 , inc : bool ) -> bool {
1313 let diff = if inc { y - x } else { x - y } ;
14-
1514 ( 1 ..=3 ) . contains ( & diff)
1615}
1716
@@ -42,28 +41,25 @@ where
4241}
4342
4443fn find_broken_position_with_problem_dampener ( line : & [ i32 ] ) -> Option < usize > {
45- match find_broken_position ( line. iter ( ) ) {
46- Some ( pos) => {
47- let left = & line[ ..pos] ;
48- let right = & line[ pos + 1 ..] ;
49- find_broken_position ( left. iter ( ) . chain ( right. iter ( ) ) ) ?;
50-
51- if pos > 0 {
52- let left = & line[ ..pos - 1 ] ;
53- let right = & line[ pos..] ;
54- find_broken_position ( left. iter ( ) . chain ( right. iter ( ) ) ) ?;
55- }
56-
57- if pos < line. len ( ) {
58- let left = & line[ ..pos + 1 ] ;
59- let right = & line[ pos + 2 ..] ;
60- find_broken_position ( left. iter ( ) . chain ( right. iter ( ) ) ) ?;
61- }
62-
63- Some ( pos)
64- }
65- None => None ,
44+ let broken_position = find_broken_position ( line. iter ( ) ) ?;
45+
46+ let left = & line[ ..broken_position] ;
47+ let right = & line[ broken_position + 1 ..] ;
48+ find_broken_position ( left. iter ( ) . chain ( right. iter ( ) ) ) ?;
49+
50+ if broken_position > 0 {
51+ let left = & line[ ..broken_position - 1 ] ;
52+ let right = & line[ broken_position..] ;
53+ find_broken_position ( left. iter ( ) . chain ( right. iter ( ) ) ) ?;
6654 }
55+
56+ if broken_position < line. len ( ) {
57+ let left = & line[ ..broken_position + 1 ] ;
58+ let right = & line[ broken_position + 2 ..] ;
59+ find_broken_position ( left. iter ( ) . chain ( right. iter ( ) ) ) ?;
60+ }
61+
62+ Some ( broken_position)
6763}
6864
6965pub fn part_one ( input : & str ) -> Option < usize > {
0 commit comments