]> www.fi.muni.cz Git - aoc.git/blobdiff - 2022/29.pl
Day 15: a bit polished, but still slow (43s)
[aoc.git] / 2022 / 29.pl
index 71896f36bef98ab61d733ded8d502ebcad1935ac..2b7128b98c265d7dee6471fdb430953696148c03 100755 (executable)
@@ -7,35 +7,29 @@ use experimental 'multidimensional';
 my $row = 2000000;
 
 my @ints;
-
 my %corr;
 
 while (<>) {
        my ($sx, $sy, $cx, $cy) = /(-?\d+)/g;
        my $r = abs($sx - $cx) + abs($sy - $cy);
        my $dist = abs($sy - $row);
-       say "dist =$dist";
-       if ($dist < $r) {
-               my $l = abs($dist-$r);
-               push @ints, [ $sx - ($r - $dist), $sx + ($r - $dist) ];
-               say "$ints[-1][0] $ints[-1][1]";
-               $corr{$cx} = 1 if $cy == $row;
-       }
+       next if $dist >= $r;
+
+       push @ints, [ $sx - ($r - $dist), $sx + ($r - $dist) ];
+       $corr{$cx} = 1 if $cy == $row;
 }
 
 @ints = sort { $a->[0] <=> $b->[0] } @ints;
-my $prev = shift @ints;
-my $sum = $prev->[1] - $prev->[0] + 1;
+my $sum = $ints[0][1] - $ints[0][0] + 1;
+my $prev = (shift @ints)->[1];
 
 for my $int (@ints) {
-       if ($int->[0] > $prev->[1]) {
+       if ($int->[0] > $prev) {
                $sum += $int->[1] - $int->[0] + 1;
-               $prev = $int;
-       } elsif ($int->[1] <= $prev->[1]) {
-               next;
-       } else {
-               $sum += $int->[1] - $prev->[1];
-               $prev = $int;
+               $prev = $int->[1];
+       } elsif ($int->[1] > $prev) {
+               $sum += $int->[1] - $prev;
+               $prev = $int->[1];
        }
 }