]> www.fi.muni.cz Git - aoc2021.git/blobdiff - 38.pl
Day 19: boring work, long and ugly code
[aoc2021.git] / 38.pl
diff --git a/38.pl b/38.pl
new file mode 100755 (executable)
index 0000000..b604ecc
--- /dev/null
+++ b/38.pl
@@ -0,0 +1,45 @@
+#!/usr/bin/perl -w
+
+use v5.16;
+
+$; = ',';
+
+sub transform {
+       my ($coords, $trans) = @_;
+       my @res;
+       for (0 .. $#$coords) {
+               $res[$_] = $coords->[$trans->[$_]];
+               $res[$_] *= -1 if $trans->[$_+@$coords] < 0;
+       }
+       return @res;
+}
+
+my %aligned_scanners = ('scanner 0' => [ 0, 0, 0 ]);
+
+# parsing the debugging output of the first part ...
+while (<>) {
+       my ($s1, $s2, $rest) = /(.*) and (.*) aligned: (.*) beacons:/;
+       next if !$rest;
+
+       my @r = split /,/, $rest;
+       my @off = @r[0..2];
+       my @rot = @r[3..8];
+
+       # @off = transform(\@off, \@rot);
+       say "$s1 to $s2";
+       # $off[$_] += $aligned_scanners{$s1}->[$_] for 0..2;
+       say "$s2 at ", join(',', @off);
+       $aligned_scanners{$s2} = [ @off ];
+}
+
+my $max_dist = 0;
+for my $s1 (keys %aligned_scanners) {
+for my $s2 (keys %aligned_scanners) {
+       my $dist;
+       $dist += abs($aligned_scanners{$s1}->[$_] - $aligned_scanners{$s2}->[$_]) for 0 .. 2;
+       $max_dist = $dist if $dist > $max_dist;
+       say "$s1 to $s2 = $dist";
+} }
+
+say $max_dist;
+