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