]> www.fi.muni.cz Git - aoc2021.git/commitdiff
Day 13: more off-by-one errors.
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 13 Dec 2021 05:28:05 +0000 (06:28 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Mon, 13 Dec 2021 05:28:05 +0000 (06:28 +0100)
25.pl [new file with mode: 0755]
26.pl [new file with mode: 0755]

diff --git a/25.pl b/25.pl
new file mode 100755 (executable)
index 0000000..ceeb16f
--- /dev/null
+++ b/25.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+
+use v5.16;
+
+my %dots;
+
+while (<>) {
+       chomp;
+       my ($x, $y) = split /,/;
+       last if !defined $y;
+       $dots{$x}{$y}++;
+}
+
+my ($maxx, $maxy);
+while (<>) {
+       chomp;
+       my ($axis, $val) = /fold along (.)=(\d+)/;
+
+       for my $x (keys %dots) {
+       for my $y (keys %{$dots{$x}}) {
+               if ($axis eq 'x' && $x > $val) {
+                       $dots{2*$val - $x}{$y}++;
+                       delete $dots{$x}{$y};
+               } elsif ($axis eq 'y' && $y > $val) {
+                       $dots{$x}{2*$val - $y}++;
+                       delete $dots{$x}{$y};
+               }
+       } }
+       last;
+}
+
+my $sum;
+for my $x (keys %dots) {
+       $sum += keys %{$dots{$x}};
+}
+
+say $sum;
+
diff --git a/26.pl b/26.pl
new file mode 100755 (executable)
index 0000000..c789704
--- /dev/null
+++ b/26.pl
@@ -0,0 +1,40 @@
+#!/usr/bin/perl -w
+
+use v5.16;
+
+my %dots;
+
+while (<>) {
+       chomp;
+       my ($x, $y) = split /,/;
+       last if !defined $y;
+       $dots{$x}{$y}++;
+}
+
+my ($maxx, $maxy);
+while (<>) {
+       chomp;
+       my ($axis, $val) = /fold along (.)=(\d+)/;
+
+       $maxx = $val if $axis eq 'x' && (!$maxx || $maxx > $val);
+       $maxy = $val if $axis eq 'y' && (!$maxy || $maxy > $val);
+
+       for my $x (keys %dots) {
+       for my $y (keys %{$dots{$x}}) {
+               if ($axis eq 'x' && $x > $val) {
+                       $dots{2*$val - $x}{$y}++;
+                       delete $dots{$x}{$y};
+               } elsif ($axis eq 'y' && $y > $val) {
+                       $dots{$x}{2*$val - $y}++;
+                       delete $dots{$x}{$y};
+               }
+       } }
+}
+
+for my $y (0 .. $maxy) {
+       for my $x (0 .. 40) {
+               print $dots{$x}{$y} ? '#' : ' ';
+       }
+       print "\n";
+}
+