]> www.fi.muni.cz Git - aoc2021.git/blob - 28.pl
Day 25: pretty straightforward
[aoc2021.git] / 28.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4
5 chomp (my $tmpl = <>);
6 scalar <>;
7
8 my %rules;
9 while (<>) {
10         chomp;
11         my ($s1, $s2, $d) = /[A-Z]/g;
12         $rules{"$s1$s2"} = [ "$s1$d", "$d$s2", $d ];
13 }
14
15 my (%pairs, %count);
16 for my $i (0 .. length($tmpl) - 2) {
17         $pairs{substr($tmpl, $i, 2)}++;
18         $count{substr($tmpl, $i, 1)}++;
19 }
20 $count{substr($tmpl, -1, 1)}++;
21
22 for (1 .. 40) {
23         my %newp;
24         for my $pair (grep { $rules{$_} } keys %pairs) {
25                 my $rule = $rules{$pair};
26                  $newp{ $rule->[0] } += $pairs{$pair};
27                  $newp{ $rule->[1] } += $pairs{$pair};
28                 $count{ $rule->[2] } += $pairs{$pair};
29         }
30         %pairs = %newp;
31 }
32
33 my @count = sort { $a <=> $b } values %count;
34 say $count[-1] - $count[0];
35