]> www.fi.muni.cz Git - aoc.git/blob - 2019/47.pl
Rest of 2019
[aoc.git] / 2019 / 47.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4
5 my @map = map { chomp; [ split // ] } <>;
6
7 my $min;
8 my %seen;
9 while (1) {
10         say "After ", ++$min, ":";
11         my @nm;
12         for my $y (0 .. 4) {
13         for my $x (0 .. 4) {
14                 my $sum = 0;
15                 for my ($dx, $dy) (1, 0, 0, 1, -1, 0, 0, -1) {
16                         my $nx = $x + $dx;
17                         my $ny = $y + $dy;
18                         next if $nx < 0 || $nx > 4 || $ny < 0 || $ny > 4;
19                         $sum++ if $map[$ny][$nx] eq '#';
20                 }
21                 # say "at $x $y neigbors $sum";
22                 if ($map[$y][$x] eq '#') {
23                         $nm[$y][$x] = $sum == 1 ? '#' : '.';
24                 } else {
25                         $nm[$y][$x] = $sum == 1 || $sum == 2 ? '#' : '.';
26                 }
27                 print $nm[$y][$x];
28         }
29                 print "\n";
30         }
31         @map = @nm;
32         my $key = join('', map { join('', @$_) } @map);
33         if ($seen{$key}) {
34                 say "this one was last seen at min $seen{$key}";
35                 my $b = reverse $key;
36                 $b =~ tr/.#/01/;
37                 say oct "0b$b";
38                 last;
39         }
40         $seen{$key} = $min;
41         print "\n";
42 }
43