]> www.fi.muni.cz Git - aoc.git/commitdiff
Day 09: wrong assumptions
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 9 Dec 2025 07:16:38 +0000 (08:16 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 9 Dec 2025 07:16:38 +0000 (08:16 +0100)
2025/17.pl [new file with mode: 0755]
2025/18.pl [new file with mode: 0755]

diff --git a/2025/17.pl b/2025/17.pl
new file mode 100755 (executable)
index 0000000..ec27037
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/perl -w
+
+use v5.42;
+
+my @coords = map { [ /\d+/g ] } <>;
+
+my $max;
+for my $i (0 .. $#coords-1) {
+       for my $j ($i+1 .. $#coords) {
+               my $area = (1+abs($coords[$i][0]-$coords[$j][0]))
+                       * (1+abs($coords[$i][1]-$coords[$j][1]));
+               $max = $area if !defined $max || $area > $max;
+       }
+}
+say $max;
diff --git a/2025/18.pl b/2025/18.pl
new file mode 100755 (executable)
index 0000000..c0a1e2f
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/perl -w
+
+use v5.42;
+use List::Util qw(max min);
+
+my @coords = map { [ /\d+/g ] } <>;
+my @lines;
+for my $i (0 .. $#coords) {
+       my $j = $i+1;
+       $j = 0 if $j > $#coords;
+       push @lines, [ @{ $coords[$i] }, @{ $coords[$j] } ];
+}
+
+my $max;
+for my $i (0 .. $#coords-1) {
+       RECT:
+       for my $j ($i+1 .. $#coords) {
+               my ($x0, $y0, $x1, $y1) = (
+                       min ($coords[$i][0], $coords[$j][0]),
+                       min ($coords[$i][1], $coords[$j][1]),
+                       max ($coords[$i][0], $coords[$j][0]),
+                       max ($coords[$i][1], $coords[$j][1]),
+               );
+               for my $k (0 .. $#coords) {
+                       next if $k == $i || $k == $j;
+                       my ($xk, $yk) = @{ $coords[$k] };
+                       next RECT if $xk > $x0 && $xk < $x1
+                               && $yk > $y0 && $yk < $y1;
+               }
+               for my $k (0 .. $#lines) {
+                       my ($lx0, $ly0, $lx1, $ly1) = @{ $lines[$k] };
+                       ($lx0, $lx1) = ($lx1, $lx0) if $lx1 < $lx0;
+                       ($ly0, $ly1) = ($ly1, $ly0) if $ly1 < $ly0;
+                       if ($lx0 == $lx1) {
+                               next if $lx0 <= $x0 || $lx0 >= $x1;
+                               next RECT if $ly0 <= $y0 && $ly1 >= $y1;
+                       } else {
+                               next if $ly0 <= $y0 || $ly0 >= $y1;
+                               next RECT if $lx0 <= $x0 && $lx1 >= $x1;
+                       }
+               }
+               my $area = (1+abs($coords[$i][0]-$coords[$j][0]))
+                       * (1+abs($coords[$i][1]-$coords[$j][1]));
+               $max = $area if !defined $max || $area > $max;
+       }
+}
+say $max;