]> www.fi.muni.cz Git - aoc.git/blob - 2015/36.pl
Day 25: examining the input
[aoc.git] / 2015 / 36.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4 use strict;
5
6 my @m = map { chomp; [ split // ] } <>;
7
8 my $dim = @m - 1;
9
10 for my $x (0, $dim) {
11         for my $y (0, $dim) {
12                 $m[$y][$x] = '#';
13         }
14 }
15
16 for (1 .. 100) {
17         my @nm;
18         for my $y (0 .. $dim) {
19         for my $x (0 .. $dim) {
20                 my $sum = 0;
21                 for my $dy (-1 .. 1) {
22                         next if $y + $dy < 0 || $y + $dy > $dim;
23                         for my $dx (-1 .. 1) {
24                                 next if $x + $dx < 0 || $x + $dx > $dim;
25                                 next if $dx == 0 && $dy == 0;
26                                 $sum++ if $m[$y+$dy][$x+$dx] eq '#';
27                         }
28                 }
29                 if (($y == 0 || $y == $dim) && ($x == 0 || $x == $dim)) {
30                         $nm[$y][$x] = '#';
31                 } elsif ($m[$y][$x] eq '#') {
32                         $nm[$y][$x] = $sum == 2 || $sum == 3 ? '#' : '.';
33                 } else {
34                         $nm[$y][$x] = $sum == 3 ? '#' : '.';
35                 }
36         } }
37         @m = @nm;
38 }
39
40 my $sum;
41 for my $y (0 .. $dim) {
42 for my $x (0 .. $dim) {
43         $sum++ if $m[$y][$x] eq '#';
44 } }
45
46 say $sum;