]> www.fi.muni.cz Git - aoc2021.git/blob - 39.pl
Day 25: pretty straightforward
[aoc2021.git] / 39.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4
5 my @m = split //, <>;
6 scalar <>;
7
8 $; = ',';
9 my @image = map { chomp; [ split // ] } <>;
10
11 my $odd = 1;
12 sub enhance {
13         my $img = shift;
14         my $ymax = @$img;
15         my $xmax = @{ $img->[0] };
16
17         say "odd=$odd, m0=$m[0]";
18
19         my @rv;
20         for my $y (0 .. $ymax+3) {
21                 for my $x (0 .. $xmax+3) {
22                         my $idx = 0;
23                         for my $dy (-2 .. 0) {
24                                 my $y2 = $y+$dy;
25                                 for my $dx (-2 .. 0) {
26                                         my $x2 = $x+$dx;
27                                         # say "$x,$y + $dx,$dy = $x2, $y2";
28                                         $idx <<= 1;
29                                         if ($y2 >= 0 && $y2 < $ymax
30                                                 && $x2 >= 0 && $x2 < $xmax) {
31                                                         $idx++ if $img->[$y2][$x2] eq '#';
32                                         } else {
33                                                 $idx++ if !$odd && ($m[0] eq '#');
34                                         }
35                                 }
36                         }
37                         # say "$x,$y => $idx => $m[$idx]";
38                         $rv[$y][$x] = $m[$idx];
39                 }
40         }
41
42         $odd = !$odd;
43
44         return @rv;
45 }
46
47 sub imgdump {
48         my $img = shift;
49         my $ymax = @$img;
50         my $xmax = @{ $img->[0] };
51
52         my $sum;
53
54         say "$xmax x $ymax";
55         for my $y (0 .. $ymax-1) {
56                 for my $x (0 .. $xmax-1) {
57                         print $img->[$y][$x];
58                         $sum++ if $img->[$y][$x] eq '#';
59                 }
60                 print "\n";
61         }
62         say "sum=$sum";
63 }
64
65 for (1 .. 50) {
66         imgdump(\@image);
67         @image = enhance(\@image);
68 }
69 imgdump(\@image);
70 my $sum = 0;
71 for my $row (@image) {
72         for my $pixel (@$row) {
73                 $sum++ if $pixel eq '#';
74         }
75 }
76 say "pixels = $sum";