X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=2023%2F27.pl;h=d49d6b93038ee4f55e5d3163f80ef6613a63d877;hb=a4e1f82c3a7c63cf418e9ce63987b931792b7124;hp=ab6cbcd40579823048fee4da74d9897b0d97b3be;hpb=9df28e43f93ba69cba3f7f56dbb1b77235ad7413;p=aoc.git diff --git a/2023/27.pl b/2023/27.pl index ab6cbcd..d49d6b9 100755 --- a/2023/27.pl +++ b/2023/27.pl @@ -7,25 +7,18 @@ my $xmax = $#{ $map[0] }; my $ymax = $#map; my $sum; -my $retry = 1; -while ($retry) { - $retry = 0; -for my $y (1 .. $ymax) { +for my $y (0 .. $ymax) { for my $x (0 .. $xmax) { - if ($map[$y][$x] eq 'O' && $map[$y-1][$x] eq '.') { - $map[$y-1][$x] = 'O'; + next if $map[$y][$x] ne 'O'; + my $y1 = $y; + $y1-- while $y1 && $map[$y1-1][$x] eq '.'; + if ($y1 != $y) { + $map[$y1][$x] = 'O'; $map[$y][$x] = '.'; - $retry = 1; } + $sum += $ymax + 1 - $y1; } } -} - -say join('', @$_) for @map; -for my $y (0 .. $ymax) { - for my $x (0 .. $xmax) { - $sum += $ymax + 1 - $y if $map[$y][$x] eq 'O'; - } -} +say join('', @$_) for @map; say $sum;