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