From: Jan "Yenya" Kasprzak Date: Sun, 8 Dec 2024 08:06:50 +0000 (+0100) Subject: Day 8: messed up coordinates, too slow X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=eb1ab56b3f9d54df2211b972b672831601332af8;p=aoc.git Day 8: messed up coordinates, too slow --- diff --git a/2024/15.pl b/2024/15.pl new file mode 100755 index 0000000..7fdd69d --- /dev/null +++ b/2024/15.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl -w + +use v5.40; + +my %ant; + +my ($w, $h); +while (<>) { + chomp; + $w //= length()-1; + push @{ $ant{$&} }, [ $. - 1, pos()-1 ] while /\w/g; +} +$h = $.-1; + +my %seen; +for my $freq (keys %ant) { + my @ants = $ant{$freq}->@*; + for my $i1 (0 .. $#ants-1) { + my $a1 = $ants[$i1]; + for my $i2 ($i1+1 .. $#ants) { + my $a2 = $ants[$i2]; + my ($dx, $dy) = ( + $a1->[0] - $a2->[0], + $a1->[1] - $a2->[1], + ); + for my ($x, $y) ( + $a2->[0]-$dx, $a2->[1]-$dy, + $a1->[0]+$dx, $a1->[1]+$dy, + ) { + $seen{"$x,$y"}++ + if $x >= 0 && $x <= $w + && $y >= 0 && $y <= $h; + } + } + } +} +say scalar keys %seen; diff --git a/2024/16.pl b/2024/16.pl new file mode 100755 index 0000000..492129e --- /dev/null +++ b/2024/16.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl -w + +use v5.40; + +my %ant; +my ($w, $h); +while (<>) { + chomp; + $w //= length()-1; + push @{ $ant{$&} }, [ $. - 1, pos()-1 ] + while /\w/g; +} +$h = $.-1; + +sub gcd($a, $b) { + ($a, $b) = ($b, $a) if $a < $b; + ($a, $b) = ($b, $a % $b) while $b; + return $a; +} + +my %seen; +for my $freq (keys %ant) { + my @ants = $ant{$freq}->@*; + for my $i1 (0 .. $#ants-1) { + my $a1 = $ants[$i1]; + + for my $i2 ($i1+1 .. $#ants) { + my $a2 = $ants[$i2]; + + my ($dx, $dy) = ( + $a1->[0] - $a2->[0], + $a1->[1] - $a2->[1], + ); + my $g = gcd(abs($dx), abs($dy)); + $dx /= $g; $dy /= $g; + + for my $dir (-1, 1) { + my $t = 0; + while (1) { + my $x = $a1->[0]+$dir*$t*$dx; + my $y = $a1->[1]+$dir*$t*$dy; + last if $x < 0 || $x > $w + || $y < 0 || $y > $h; + $seen{"$x,$y"}++; + $t++; + } + } + } + } +} + +say scalar keys %seen;