]> www.fi.muni.cz Git - aoc.git/blob - 2018/18.pl
Day 25: examining the input
[aoc.git] / 2018 / 18.pl
1 #!/usr/bin/perl -w
2
3 use v5.30;
4 use strict;
5
6 my ($players, $last) = @ARGV;
7
8 my %prev = ( 0 => 0 );
9 my %next = ( 0 => 0 );
10 my $cur = 0;
11
12 my %score;
13 for (1 .. $last) {
14         my $player = $_ % $players;
15         if ($_ % 23 == 0) {
16                 $score{$player} += $_;
17                 $cur = $prev{$cur} for 1 .. 7;
18                 $score{$player} += $cur;
19                 $next{$prev{$cur}} = $next{$cur};
20                 $prev{$next{$cur}} = $prev{$cur};
21                 $cur = $next{$cur};
22         } else {
23                 $cur = $next{$cur};
24                 my $n = $next{$cur};
25                 $next{$cur} = $_;
26                 $prev{$_} = $cur;
27                 $prev{$n} = $_;
28                 $next{$_} = $n;
29                 $cur = $_;
30         }
31         say $_ if $_ % 100000 == 0;
32         # say join(' ', $cur, @l);
33 }
34
35 use List::Util qw(max);
36 say max values %score;
37         
38