From 3d747e3a9be7b690c4ef856f18a8aad7b8bfb33c Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Tue, 9 Dec 2025 08:16:38 +0100 Subject: [PATCH] Day 09: wrong assumptions --- 2025/17.pl | 15 +++++++++++++++ 2025/18.pl | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100755 2025/17.pl create mode 100755 2025/18.pl diff --git a/2025/17.pl b/2025/17.pl new file mode 100755 index 0000000..ec27037 --- /dev/null +++ b/2025/17.pl @@ -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 index 0000000..c0a1e2f --- /dev/null +++ b/2025/18.pl @@ -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; -- 2.47.3