]> www.fi.muni.cz Git - aoc2021.git/commitdiff
Day 11: too much coding
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sat, 11 Dec 2021 05:37:07 +0000 (06:37 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Sat, 11 Dec 2021 05:37:07 +0000 (06:37 +0100)
21.pl [new file with mode: 0755]
22.pl [new file with mode: 0755]

diff --git a/21.pl b/21.pl
new file mode 100755 (executable)
index 0000000..8bbba21
--- /dev/null
+++ b/21.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -w
+
+use v5.16;
+
+my @m = map { chomp; [ split // ] } <>;
+
+my $sum;
+for (1 .. 100) {
+       my %f;
+       my @q;
+       for my $x (0 .. 9) {
+       for my $y (0 .. 9) {
+               next if $f{$x,$y};
+               next if ++$m[$y][$x] < 10;
+               $f{$x,$y} = 1;
+               push @q, [$x,$y];
+               say "flashed:$x,$y";
+       } }
+       while (@q) {
+               my $p = shift @q;
+               my ($x2, $y2) = @$p;
+
+               for my $dx (-1 .. 1) {
+               for my $dy (-1 .. 1) {
+                       next if $dx == 0 && $dy == 0;
+                       next if $x2+$dx < 0 || $x2+$dx > 9;
+                       next if $y2+$dy < 0 || $y2+$dy > 9;
+                       next if $f{$x2+$dx,$y2+$dy};
+                       say $x2+$dx, ',', $y2+$dy, ' >',$m[$y2+$dy][$x2+$dx];
+                       next if ++$m[$y2+$dy][$x2+$dx] < 10;
+                       $f{$x2+$dx,$y2+$dy} = 1;
+                       push @q, [$x2+$dx, $y2+$dy];
+                       say "flashed ", $x2+$dx,',',$y2+$dy;
+               } }
+       }
+       for my $p (keys %f) {
+               my ($x, $y) = split /$;/, $p;
+               $m[$y][$x] = 0;
+       }
+       say "Step $_ flashes ", scalar keys %f;
+       say join("\n", map { join('', @$_) } @m);
+       say;
+       # last if $_ > 1;
+       $sum += keys %f;
+}
+
+say $sum;
+
diff --git a/22.pl b/22.pl
new file mode 100755 (executable)
index 0000000..221c686
--- /dev/null
+++ b/22.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -w
+
+use v5.16;
+
+my @m = map { chomp; [ split // ] } <>;
+
+my $sum;
+my $step = 0;
+while (++$step) {
+       my %f;
+       my @q;
+       for my $x (0 .. 9) {
+       for my $y (0 .. 9) {
+               next if $f{$x,$y};
+               next if ++$m[$y][$x] < 10;
+               $f{$x,$y} = 1;
+               push @q, [$x,$y];
+               say "flashed:$x,$y";
+       } }
+       while (@q) {
+               my $p = shift @q;
+               my ($x2, $y2) = @$p;
+
+               for my $dx (-1 .. 1) {
+               for my $dy (-1 .. 1) {
+                       next if $dx == 0 && $dy == 0;
+                       next if $x2+$dx < 0 || $x2+$dx > 9;
+                       next if $y2+$dy < 0 || $y2+$dy > 9;
+                       next if $f{$x2+$dx,$y2+$dy};
+                       say $x2+$dx, ',', $y2+$dy, ' >',$m[$y2+$dy][$x2+$dx];
+                       next if ++$m[$y2+$dy][$x2+$dx] < 10;
+                       $f{$x2+$dx,$y2+$dy} = 1;
+                       push @q, [$x2+$dx, $y2+$dy];
+                       say "flashed ", $x2+$dx,',',$y2+$dy;
+               } }
+       }
+       for my $p (keys %f) {
+               my ($x, $y) = split /$;/, $p;
+               $m[$y][$x] = 0;
+       }
+       say "Step $_ flashes ", scalar keys %f;
+       say join("\n", map { join('', @$_) } @m);
+       say;
+       last if keys %f == 100;
+}
+
+say $step;
+