X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=2023%2F21.pl;fp=2023%2F21.pl;h=bfc568a83d98a07fbd9233b04013f17e1b75b892;hb=9e2ac1101f0c865e0c6e07e02213313ff75e625b;hp=0000000000000000000000000000000000000000;hpb=effe859821bf2efb6064b8adc70d520dd02bdcb6;p=aoc.git diff --git a/2023/21.pl b/2023/21.pl new file mode 100755 index 0000000..bfc568a --- /dev/null +++ b/2023/21.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl -w + +use v5.38; + +my @gxys; +my $y = 0; +while (<>) { + while (/#/g) { + my $x = pos()-1; + push @gxys, [ $x, $y ]; + } + $y++; +} + +my %x_gxy = map { $_->[0] => 1 } @gxys; +my %y_gxy = map { $_->[1] => 1 } @gxys; + +my $steps; +for my $i (0 .. $#gxys-1) { + for my $j ($i .. $#gxys) { + my ($x1, $y1) = $gxys[$i]->@*; + my ($x2, $y2) = $gxys[$j]->@*; + + ($x1, $x2) = ($x2, $x1) if $x1 > $x2; + for ($x1+1 .. $x2) { + $steps += $x_gxy{$_} ? 1 : 2; + } + + ($y1, $y2) = ($y2, $y1) if $y1 > $y2; + for ($y1+1 .. $y2) { + $steps += $y_gxy{$_} ? 1 : 2; + } + } +} + +say $steps;