1
1
#![ feature( test, iter_intersperse) ]
2
2
3
+ use ndarray:: Array2 ;
3
4
use rayon:: prelude:: * ;
4
5
5
6
type Input = Vec < Report > ;
@@ -45,8 +46,8 @@ fn setup(input: &str) -> Input {
45
46
}
46
47
47
48
fn count ( report : & Report ) -> usize {
48
- let mut dp = vec ! [ vec! [ 0 ; report. groups . len( ) + 1 ] ; report. springs . len( ) + 1 ] ;
49
- dp[ report. springs . len ( ) ] [ report. groups . len ( ) ] = 1 ;
49
+ let mut dp = Array2 :: zeros ( ( report. springs . len ( ) + 1 , report. groups . len ( ) + 1 ) ) ;
50
+ dp[ [ report. springs . len ( ) , report. groups . len ( ) ] ] = 1 ;
50
51
for i in ( 0 ..report. springs . len ( ) ) . rev ( ) {
51
52
for j in 0 ..report. groups . len ( ) + 1 {
52
53
if matches ! ( report. springs[ i] , Spring :: Damaged | Spring :: Unknown )
@@ -56,15 +57,15 @@ fn count(report: &Report) -> usize {
56
57
&& ( i + report. groups [ j] >= report. springs . len ( )
57
58
|| report. springs [ i + report. groups [ j] ] != Spring :: Damaged )
58
59
{
59
- dp[ i ] [ j ] += dp[ report. springs . len ( ) . min ( i + report. groups [ j] + 1 ) ] [ j + 1 ] ;
60
+ dp[ [ i , j ] ] += dp[ [ report. springs . len ( ) . min ( i + report. groups [ j] + 1 ) , j + 1 ] ] ;
60
61
}
61
62
62
63
if matches ! ( report. springs[ i] , Spring :: Operational | Spring :: Unknown ) {
63
- dp[ i ] [ j ] += dp[ report. springs . len ( ) . min ( i + 1 ) ] [ j ] ;
64
+ dp[ [ i , j ] ] += dp[ [ report. springs . len ( ) . min ( i + 1 ) , j ] ] ;
64
65
}
65
66
}
66
67
}
67
- dp[ 0 ] [ 0 ]
68
+ dp[ [ 0 , 0 ] ]
68
69
}
69
70
70
71
fn part1 ( input : & Input ) -> usize {
0 commit comments