]> www.fi.muni.cz Git - aoc.git/blobdiff - 2015/36.pl
Year 2015
[aoc.git] / 2015 / 36.pl
diff --git a/2015/36.pl b/2015/36.pl
new file mode 100755 (executable)
index 0000000..50cdc44
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+
+use v5.16;
+use strict;
+
+my @m = map { chomp; [ split // ] } <>;
+
+my $dim = @m - 1;
+
+for my $x (0, $dim) {
+       for my $y (0, $dim) {
+               $m[$y][$x] = '#';
+       }
+}
+
+for (1 .. 100) {
+       my @nm;
+       for my $y (0 .. $dim) {
+       for my $x (0 .. $dim) {
+               my $sum = 0;
+               for my $dy (-1 .. 1) {
+                       next if $y + $dy < 0 || $y + $dy > $dim;
+                       for my $dx (-1 .. 1) {
+                               next if $x + $dx < 0 || $x + $dx > $dim;
+                               next if $dx == 0 && $dy == 0;
+                               $sum++ if $m[$y+$dy][$x+$dx] eq '#';
+                       }
+               }
+               if (($y == 0 || $y == $dim) && ($x == 0 || $x == $dim)) {
+                       $nm[$y][$x] = '#';
+               } elsif ($m[$y][$x] eq '#') {
+                       $nm[$y][$x] = $sum == 2 || $sum == 3 ? '#' : '.';
+               } else {
+                       $nm[$y][$x] = $sum == 3 ? '#' : '.';
+               }
+       } }
+       @m = @nm;
+}
+
+my $sum;
+for my $y (0 .. $dim) {
+for my $x (0 .. $dim) {
+       $sum++ if $m[$y][$x] eq '#';
+} }
+
+say $sum;