From: Jan "Yenya" Kasprzak Date: Tue, 14 Dec 2021 07:32:22 +0000 (+0100) Subject: 28.pl: code cleanup X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=aoc2021.git;a=commitdiff_plain;h=6f0b62d78949e30c1d6443fe0548d9731158fe1e 28.pl: code cleanup --- diff --git a/28.pl b/28.pl index 5717759..d07c23c 100755 --- 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];