]> www.fi.muni.cz Git - aoc.git/commitdiff
28.pl: code cleanup
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 14 Dec 2021 07:32:22 +0000 (08:32 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 14 Dec 2021 07:32:22 +0000 (08:32 +0100)
28.pl

diff --git a/28.pl b/28.pl
index 57177595d009473eb5189994ce20108d9585a841..d07c23cbbb9adc1063f99d20fbba1a92807c03b7 100755 (executable)
--- a/28.pl
+++ b/28.pl
@@ -1,41 +1,35 @@
 #!/usr/bin/perl -w
 
 use v5.16;
-use List::Util qw(sum0);
 
 chomp (my $tmpl = <>);
 scalar <>;
 
-my (%r1, %r2, %ins);
+my %rules;
 while (<>) {
        chomp;
-       my ($s1, $s2, $d) = /([A-Z])/g;
-       $r1{"$s1$s2"} = "$s1$d";
-       $r2{"$s1$s2"} = "$d$s2";
-       $ins{"$s1$s2"} = $d;
+       my ($s1, $s2, $d) = /[A-Z]/g;
+       $rules{"$s1$s2"} = [ "$s1$d", "$d$s2", $d ];
 }
 
-my %count;
-my %p;
+my (%pairs, %count);
 for my $i (0 .. length($tmpl) - 2) {
-       $p{substr($tmpl, $i, 2)}++;
+       $pairs{substr($tmpl, $i, 2)}++;
        $count{substr($tmpl, $i, 1)}++;
 }
 $count{substr($tmpl, -1, 1)}++;
 
 for (1 .. 40) {
-       my %p1;
-       for my $pair (keys %p) {
-               if ($r1{$pair}) {
-                       $p1{$r1{$pair}} += $p{$pair};
-                       $p1{$r2{$pair}} += $p{$pair};
-                       $count{$ins{$pair}} += $p{$pair};
-               }
+       my %newp;
+       for my $pair (grep { $rules{$_} } keys %pairs) {
+               my $rule = $rules{$pair};
+                $newp{ $rule->[0] } += $pairs{$pair};
+                $newp{ $rule->[1] } += $pairs{$pair};
+               $count{ $rule->[2] } += $pairs{$pair};
        }
-       %p = %p1;
+       %pairs = %newp;
 }
 
 my @count = sort { $a <=> $b } values %count;
-
 say $count[-1] - $count[0];