]> www.fi.muni.cz Git - aoc.git/blob - 2022/21.pl
Day 25: examining the input
[aoc.git] / 2022 / 21.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5 use experimental 'multidimensional';
6
7 local $/ = "\n\n";
8
9 my (@queues, @ops, @divs, @ift, @iff, @steps);
10
11 while (<>) {
12         my @lines = split /\n/;
13         push @queues, [ $lines[1] =~ /\d+/g ];
14         my ($op) = $lines[2] =~ /= (.*)/;
15         $op =~ s/old/\$old/g;
16         push @ops, $op;
17         push @divs, $lines[3] =~ /(\d+)/;
18         push @ift, $lines[4] =~ /(\d+)/;
19         push @iff, $lines[5] =~ /(\d+)/;
20 }
21
22 for (1 .. 20) {
23         for my $mk (0 .. $#queues) {
24                 my $q = $queues[$mk];
25                 while (my $old = shift @$q) {
26                         $steps[$mk]++;
27                         $old = eval $ops[$mk];
28                         $old = int($old / 3);
29                         if ($old % $divs[$mk]) {
30                                 push @{ $queues[$iff[$mk]] }, $old;
31                         } else {
32                                 push @{ $queues[$ift[$mk]] }, $old;
33                         }
34                 }
35         }
36 }
37
38 @steps = sort { $b <=> $a } @steps;
39
40 say $steps[0] * $steps[1];
41