]> www.fi.muni.cz Git - aoc.git/blobdiff - 2023/27.pl
Day 14: more polished solution
[aoc.git] / 2023 / 27.pl
index ab6cbcd40579823048fee4da74d9897b0d97b3be..d49d6b93038ee4f55e5d3163f80ef6613a63d877 100755 (executable)
@@ -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;