X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=2022%2F15.pl;h=f33c42610f9c399696b396cdecd71d4b0dca452e;hb=da03373979b63bffe8ac4fa1d49c2487899d6c09;hp=f8c3ff17441145e0e447fcb0ba9e2d4aa3c87517;hpb=a904c5cd889548f999fd21132100d654837cfb19;p=aoc.git diff --git a/2022/15.pl b/2022/15.pl index f8c3ff1..f33c426 100755 --- a/2022/15.pl +++ b/2022/15.pl @@ -3,48 +3,22 @@ use v5.36; use strict; use experimental 'multidimensional'; +use List::Util qw(none); my @m = map { chomp; [ split // ] } <>; my $xmax = @{ $m[0] }; my $ymax = @m; my $count; -for my $x (1 .. $xmax-2) { for my $y (1 .. $ymax-2) { - my $h = $m[$y][$x]; - say $h; - my $visible = 1; - for my $dx (0 .. $x-1) { - $visible = 0 if $m[$y][$dx] >= $h; - } - if ($visible) { - $count++; next; - } - $visible = 1; - say " $visible"; - for my $dx ($x+1 .. $xmax-1) { - $visible = 0 if $m[$y][$dx] >= $h; - } - if ($visible) { - $count++; next; - } - $visible = 1; - say " $visible"; - for my $dy (0 .. $y-1) { - $visible = 0 if $m[$dy][$x] >= $h; - } - if ($visible) { - $count++; next; - } - $visible = 1; - say " $visible"; - for my $dy ($y+1 .. $ymax-1) { - $visible = 0 if $m[$dy][$x] >= $h; - } - if ($visible) { - $count++; next; - } - $count++ if $visible; +for my $x (1 .. $xmax-2) { + my $visible = sub { none { $m[$_->[1]][$_->[0]] >= $m[$y][$x] } @_; }; + $count++ + if $visible->( map { [ $_, $y ] } 0 .. $x-1 ) + || $visible->( map { [ $_, $y ] } $x+1 .. $xmax-1) + || $visible->( map { [ $x, $_ ] } 0 .. $y-1) + || $visible->( map { [ $x, $_ ] } $y+1 .. $ymax-1) + ; } } -say $count + 2* $xmax + 2*$ymax-4; +say $count + 2*$xmax + 2*$ymax - 4;