]> www.fi.muni.cz Git - aoc.git/commitdiff
Day 4: map walking
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Thu, 4 Dec 2025 05:13:07 +0000 (06:13 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Thu, 4 Dec 2025 05:13:07 +0000 (06:13 +0100)
2025/07.pl [new file with mode: 0755]
2025/08.pl [new file with mode: 0755]

diff --git a/2025/07.pl b/2025/07.pl
new file mode 100755 (executable)
index 0000000..05cd289
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/perl -w
+
+use v5.42;
+
+my @map = map { chomp; [ split // ] } <>;
+my $xmax = $#{ $map[0] };
+my $ymax = $#map;
+
+my $sum;
+
+for my $y (0 .. $ymax) {
+       for my $x (0 .. $xmax) {
+               next if $map[$y][$x] ne '@';
+               my $c = 0;
+               for my $dy (-1 .. 1) {
+                       my $ny = $y + $dy;
+                       next if $ny < 0 || $ny > $ymax;
+                       for my $dx (-1 .. 1) {
+                               next if $dy == 0 && $dx == 0;
+                               my $nx = $x + $dx;
+                               next if $nx < 0 || $nx > $xmax;
+                               $c++ if $map[$ny][$nx] eq '@';
+                       }
+               }
+               $sum++ if $c < 4;
+       }
+}
+
+say $sum;
diff --git a/2025/08.pl b/2025/08.pl
new file mode 100755 (executable)
index 0000000..3e4d8bf
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/perl -w
+
+use v5.42;
+
+my @map = map { chomp; [ split // ] } <>;
+my $xmax = $#{ $map[0] };
+my $ymax = $#map;
+
+my $sum;
+
+while (1) {
+       my @to_remove;
+       for my $y (0 .. $ymax) {
+               for my $x (0 .. $xmax) {
+                       next if $map[$y][$x] ne '@';
+                       my $c = 0;
+                       for my $dy (-1 .. 1) {
+                               my $ny = $y + $dy;
+                               next if $ny < 0 || $ny > $ymax;
+                               for my $dx (-1 .. 1) {
+                                       next if $dy == 0 && $dx == 0;
+                                       my $nx = $x + $dx;
+                                       next if $nx < 0 || $nx > $xmax;
+                                       $c++ if $map[$ny][$nx] eq '@';
+                               }
+                       }
+                       push @to_remove, [$x, $y] if $c < 4;
+               }
+       }
+       last if !@to_remove;
+       for my $p (@to_remove) {
+               $map[$p->[1]][$p->[0]] = '.';
+               $sum++;
+       }
+}
+
+say $sum;