use 5.20.0; use experimental qw/ postderef /; my $grid = [ map { [ (0) x 50 ] } 0..5 ]; use DDP; while(<>) { if( /rect (\d+)x(\d+)/ ) { for my $x ( 0..$1-1 ) { for my $y ( 0..$2-1 ) { $grid->[$y][$x] = 1; } } } if( /rotate row y=(\d+) by (\d+)/ ) { my @v = $grid->[$1]->@*; $grid->[$1] = [ @v[ (-$2)..-1 ], @v[0..($#v-$2)] ]; } if( /rotate column x=(\d+) by (\d+)/ ) { my @v = map { $_->[$1] } $grid->@*; @v = ( @v[ (-$2)..-1 ], @v[0..($#v-$2)] ); $grid->[$_][$1] = shift @v for 0..5; } say; say map { $_ ? '#' : ' ' } @$_ for @$grid; } use List::AllUtils qw/ sum /; say sum map { @$_ } @$grid;