]> www.fi.muni.cz Git - aoc.git/blob - 2018/35.pl
Day 25: examining the input
[aoc.git] / 2018 / 35.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5 use experimental 'multidimensional';
6
7 my @map = map { chomp; [ split // ] } <>;
8
9 my $rows = @map;
10 my $cols = @{ $map[0] };
11
12 my %total;
13 for (1..10) {
14         %total = ();
15         my @nmap;
16         for my $y (0 .. $rows-1) {
17                 my @row;
18                 for my $x (0 .. $cols-1) {
19                         my %count = map { $_ => 0 } ('#', '|', '.');
20                         for my $neigh ([-1,-1], [0, -1], [1, -1],
21                                 [-1, 0], [1, 0],
22                                 [-1, 1], [0, 1], [1, 1]) {
23                                 my $nx = $x + $neigh->[0];
24                                 my $ny = $y + $neigh->[1];
25                                 next if $nx < 0 || $nx >= $cols
26                                         || $ny < 0 || $ny >= $cols;
27                                 $count{$map[$ny][$nx]}++;
28                         }
29                         my $self = $map[$y][$x];
30                         if ($self eq '.' && $count{'|'} >= 3) {
31                                 $self = '|';
32                         } elsif ($self eq '|' && $count{'#'} >= 3) {
33                                 $self = '#';
34                         } elsif ($self eq '#' &&
35                                 ($count{'#'} == 0 || $count{'|'} == 0)) {
36                                 $self = '.';
37                         }
38                         push @row, $self;
39                         $total{$self}++;
40                 }
41                 push @nmap, \@row;
42         }
43         @map = @nmap;
44         say map { join('', @$_, "\n") } @map;
45 }
46
47 say $total{"#"} * $total{'|'};