]> www.fi.muni.cz Git - aoc2021.git/blob - 28.pl
57177595d009473eb5189994ce20108d9585a841
[aoc2021.git] / 28.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4 use List::Util qw(sum0);
5
6 chomp (my $tmpl = <>);
7 scalar <>;
8
9 my (%r1, %r2, %ins);
10 while (<>) {
11         chomp;
12         my ($s1, $s2, $d) = /([A-Z])/g;
13         $r1{"$s1$s2"} = "$s1$d";
14         $r2{"$s1$s2"} = "$d$s2";
15         $ins{"$s1$s2"} = $d;
16 }
17
18 my %count;
19 my %p;
20 for my $i (0 .. length($tmpl) - 2) {
21         $p{substr($tmpl, $i, 2)}++;
22         $count{substr($tmpl, $i, 1)}++;
23 }
24 $count{substr($tmpl, -1, 1)}++;
25
26 for (1 .. 40) {
27         my %p1;
28         for my $pair (keys %p) {
29                 if ($r1{$pair}) {
30                         $p1{$r1{$pair}} += $p{$pair};
31                         $p1{$r2{$pair}} += $p{$pair};
32                         $count{$ins{$pair}} += $p{$pair};
33                 }
34         }
35         %p = %p1;
36 }
37
38 my @count = sort { $a <=> $b } values %count;
39
40 say $count[-1] - $count[0];
41