@@ -16,22 +16,26 @@ pub fn part_one(i: &str) -> Option<u32> {
1616 let l: Vec < Vec < char > > = i. lines ( ) . map ( |s| s. chars ( ) . collect ( ) ) . collect ( ) ;
1717 Some ( ( 0 ..l. len ( ) ) . fold ( 0 , |a, i| {
1818 a + ( 0 ..l[ i] . len ( ) ) . fold ( 0 , |b, j| {
19- b + A ! ( l[ i] [ j..j + 4 ] . iter( ) )
20- + A ! ( l[ i] [ j - 3 ..j + 1 ] . iter( ) . rev( ) )
21- + A ! ( l[ i..i + 4 ] . iter( ) . map( |l| l[ j] ) )
22- + A ! ( l[ i - 3 ..i + 1 ] . iter( ) . rev( ) . map( |l| l[ j] ) )
23- + A ! ( l[ i..i + 4 ] . iter( ) . enumerate( ) . map( |( k, l) | l[ j + k] ) )
24- + A ! ( l[ i..i + 4 ] . iter( ) . enumerate( ) . map( |( k, l) | l[ j - k] ) )
25- + A ! ( l[ i - 3 ..i + 1 ] . iter( ) . rev( ) . enumerate( ) . map( |( k, l) | l[ j + k] ) )
26- + A ! ( l[ i - 3 ..i + 1 ] . iter( ) . rev( ) . enumerate( ) . map( |( k, l) | l[ j - k] ) )
19+ b + if l[ i] [ j] != 'X' {
20+ 0
21+ } else {
22+ A ! ( l[ i] [ j..j + 4 ] . iter( ) )
23+ + A ! ( l[ i] [ j - 3 ..j + 1 ] . iter( ) . rev( ) )
24+ + A ! ( l[ i..i + 4 ] . iter( ) . map( |l| l[ j] ) )
25+ + A ! ( l[ i - 3 ..i + 1 ] . iter( ) . rev( ) . map( |l| l[ j] ) )
26+ + A ! ( l[ i..i + 4 ] . iter( ) . enumerate( ) . map( |( k, l) | l[ j + k] ) )
27+ + A ! ( l[ i..i + 4 ] . iter( ) . enumerate( ) . map( |( k, l) | l[ j - k] ) )
28+ + A ! ( l[ i - 3 ..i + 1 ] . iter( ) . rev( ) . enumerate( ) . map( |( k, l) | l[ j + k] ) )
29+ + A ! ( l[ i - 3 ..i + 1 ] . iter( ) . rev( ) . enumerate( ) . map( |( k, l) | l[ j - k] ) )
30+ }
2731 } )
2832 } ) )
2933}
3034
3135#[ rustfmt:: skip]
3236pub fn part_two ( i : & str ) -> Option < u32 > {
3337 let l: Vec < Vec < char > > =i. lines ( ) . map ( |s| s. chars ( ) . collect ( ) ) . collect ( ) ;
34- Some ( ( 1 ..l. len ( ) -1 ) . map ( |i|{ ( 1 ..l[ i] . len ( ) -1 ) . map ( |j|{ [ -1 , 1 ] . map ( |d|{ matches ! ( ( 0 ..3 ) . map( |k|{ l[ i+k-1 ] [ ( j as i32 +( d* ( k as i32 -1 ) ) ) as usize ] } ) . collect:: <String >( ) . as_str( ) , "MAS" |"SAM" ) } ) . iter ( ) . all ( |& x|x) as u32 } ) . sum :: < u32 > ( ) } ) . sum ( ) )
38+ Some ( ( 1 ..l. len ( ) -1 ) . map ( |i|{ ( 1 ..l[ i] . len ( ) -1 ) . map ( |j|{ if l [ i ] [ j ] != 'A' { 0 } else { [ -1 , 1 ] . map ( |d|{ matches ! ( ( 0 ..3 ) . map( |k|{ l[ i+k-1 ] [ ( j as i32 +( d* ( k as i32 -1 ) ) ) as usize ] } ) . collect:: <String >( ) . as_str( ) , "MAS" |"SAM" ) } ) . iter ( ) . all ( |& x|x) as u32 } } ) . sum :: < u32 > ( ) } ) . sum ( ) )
3539}
3640
3741#[ cfg( test) ]
0 commit comments