]> www.fi.muni.cz Git - aoc2021.git/blob - 22.pl
221c686657d3b9ea64fa25abf37a380ae896d95d
[aoc2021.git] / 22.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4
5 my @m = map { chomp; [ split // ] } <>;
6
7 my $sum;
8 my $step = 0;
9 while (++$step) {
10         my %f;
11         my @q;
12         for my $x (0 .. 9) {
13         for my $y (0 .. 9) {
14                 next if $f{$x,$y};
15                 next if ++$m[$y][$x] < 10;
16                 $f{$x,$y} = 1;
17                 push @q, [$x,$y];
18                 say "flashed:$x,$y";
19         } }
20         while (@q) {
21                 my $p = shift @q;
22                 my ($x2, $y2) = @$p;
23
24                 for my $dx (-1 .. 1) {
25                 for my $dy (-1 .. 1) {
26                         next if $dx == 0 && $dy == 0;
27                         next if $x2+$dx < 0 || $x2+$dx > 9;
28                         next if $y2+$dy < 0 || $y2+$dy > 9;
29                         next if $f{$x2+$dx,$y2+$dy};
30                         say $x2+$dx, ',', $y2+$dy, ' >',$m[$y2+$dy][$x2+$dx];
31                         next if ++$m[$y2+$dy][$x2+$dx] < 10;
32                         $f{$x2+$dx,$y2+$dy} = 1;
33                         push @q, [$x2+$dx, $y2+$dy];
34                         say "flashed ", $x2+$dx,',',$y2+$dy;
35                 } }
36         }
37         for my $p (keys %f) {
38                 my ($x, $y) = split /$;/, $p;
39                 $m[$y][$x] = 0;
40         }
41         say "Step $_ flashes ", scalar keys %f;
42         say join("\n", map { join('', @$_) } @m);
43         say;
44         last if keys %f == 100;
45 }
46
47 say $step;
48