X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=2022%2F16.pl;h=c8562366b1408dff7b626096af46b260d7af6ac9;hb=27d0c1a07960f4080fd3032e97f25f4ad02b0e73;hp=c83a77fba1b2ecdb19a3698c8d65ee6b5f949d7f;hpb=a904c5cd889548f999fd21132100d654837cfb19;p=aoc.git diff --git a/2022/16.pl b/2022/16.pl index c83a77f..c856236 100755 --- a/2022/16.pl +++ b/2022/16.pl @@ -3,6 +3,7 @@ use v5.36; use strict; use experimental 'multidimensional'; +use List::Util qw(none); my @m = map { chomp; [ split // ] } <>; my $xmax = @{ $m[0] }; @@ -11,39 +12,21 @@ my $ymax = @m; my $max = 0; for my $y (1 .. $ymax-2) { for my $x (1 .. $xmax-2) { - my $h = $m[$y][$x]; - my $mul = 1; - my $count = 0; - for my $dx (reverse (0 .. $x-1)) { - $count++; - last if $m[$y][$dx] >= $h; - } - $mul *= $count; - - $count = 0; - for my $dx ($x+1 .. $xmax-1) { - $count++; - last if $m[$y][$dx] >= $h; - } - $mul *= $count; - - $count = 0; - for my $dy (reverse 0 .. $y-1) { - $count++; - last if $m[$dy][$x] >= $h; - } - $mul *= $count; - - $count = 0; - for my $dy ($y+1 .. $ymax-1) { - $count++; - last if $m[$dy][$x] >= $h; - } - $mul *= $count; - # say "$x $y $h $mul"; - - $max = $mul if $max < $mul; - + my $count = sub { + my $c = 0; + for (@_) { + $c++; + last if $m[$_->[1]][$_->[0]] >= $m[$y][$x]; + } + $c; + }; + my $score = $count->( map { [ $_, $y ] } reverse 0 .. $x-1 ) + * $count->( map { [ $_, $y ] } $x+1 .. $xmax-1) + * $count->( map { [ $x, $_ ] } reverse 0 .. $y-1) + * $count->( map { [ $x, $_ ] } $y+1 .. $ymax-1) + ; + $max = $score if $max < $score; } } say $max; +