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