@@ -9,33 +9,70 @@ pub fn input_generator(input: &str) -> Vec<Vec<usize>> {
99}
1010
1111#[ aoc( day2, part1) ]
12- pub fn part1 ( input : & Vec < Vec < usize > > ) -> usize {
12+ pub fn part1 ( input : & [ Vec < usize > ] ) -> usize {
1313 input
1414 . iter ( )
15- . filter ( |report| {
16- let increasing = if report[ 0 ] < report[ 1 ] { true } else { false } ;
17- let mut first = true ;
15+ . filter ( |& report| {
16+ let increasing = report[ 0 ] < report[ 1 ] ;
1817 let mut last = 0 ;
19- for val in report. iter ( ) {
20- if first {
21- last = * val;
22- first = false ;
18+ for i in 0 ..report. len ( ) {
19+ if i == 0 {
20+ last = report[ i] ;
2321 continue ;
2422 }
25- if val . abs_diff ( last) < 1 || val . abs_diff ( last) > 3 {
23+ if report [ i ] . abs_diff ( last) < 1 || report [ i ] . abs_diff ( last) > 3 {
2624 return false ;
2725 }
28- if increasing && * val < last {
26+ if increasing && report [ i ] < last {
2927 return false ;
3028 }
31- if !increasing && * val > last {
29+ if !increasing && report [ i ] > last {
3230 return false ;
3331 }
34- last = * val ;
32+ last = report [ i ] ;
3533 }
3634 true
3735 } )
38- . fold ( 0 , |acc, _| acc + 1 )
36+ . count ( )
37+ }
38+
39+ #[ aoc( day2, part2) ]
40+ pub fn part2 ( input : & [ Vec < usize > ] ) -> usize {
41+ input
42+ . iter ( )
43+ . filter ( |& report| {
44+ for i in 0 ..report. len ( ) {
45+ let mut new_report = report. clone ( ) ;
46+ new_report. remove ( i) ;
47+ let increasing = new_report[ 0 ] < new_report[ 1 ] ;
48+ let mut last = 0 ;
49+ let mut bad = false ;
50+ for j in 0 ..new_report. len ( ) {
51+ if j == 0 {
52+ last = new_report[ j] ;
53+ continue ;
54+ }
55+ if new_report[ j] . abs_diff ( last) < 1 || new_report[ j] . abs_diff ( last) > 3 {
56+ bad = true ;
57+ break ;
58+ }
59+ if increasing && new_report[ j] < last {
60+ bad = true ;
61+ break ;
62+ }
63+ if !increasing && new_report[ j] > last {
64+ bad = true ;
65+ break ;
66+ }
67+ last = new_report[ j] ;
68+ }
69+ if !bad {
70+ return true ;
71+ }
72+ }
73+ false
74+ } )
75+ . count ( )
3976}
4077
4178#[ cfg( test) ]
@@ -54,8 +91,8 @@ mod tests {
5491 assert_eq ! ( 2 , part1( & input_generator( INPUT ) ) )
5592 }
5693
57- // #[test]
58- // fn test_part2() {
59- // assert_eq!(31 , part2(&input_generator(INPUT)))
60- // }
94+ #[ test]
95+ fn test_part2 ( ) {
96+ assert_eq ! ( 4 , part2( & input_generator( INPUT ) ) )
97+ }
6198}
0 commit comments