]> www.fi.muni.cz Git - aoc.git/blobdiff - 2018/18.pl
Year 2018
[aoc.git] / 2018 / 18.pl
diff --git a/2018/18.pl b/2018/18.pl
new file mode 100755 (executable)
index 0000000..e7c9e12
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+
+use v5.30;
+use strict;
+
+my ($players, $last) = @ARGV;
+
+my %prev = ( 0 => 0 );
+my %next = ( 0 => 0 );
+my $cur = 0;
+
+my %score;
+for (1 .. $last) {
+       my $player = $_ % $players;
+       if ($_ % 23 == 0) {
+               $score{$player} += $_;
+               $cur = $prev{$cur} for 1 .. 7;
+               $score{$player} += $cur;
+               $next{$prev{$cur}} = $next{$cur};
+               $prev{$next{$cur}} = $prev{$cur};
+               $cur = $next{$cur};
+       } else {
+               $cur = $next{$cur};
+               my $n = $next{$cur};
+               $next{$cur} = $_;
+               $prev{$_} = $cur;
+               $prev{$n} = $_;
+               $next{$_} = $n;
+               $cur = $_;
+       }
+       say $_ if $_ % 100000 == 0;
+       # say join(' ', $cur, @l);
+}
+
+use List::Util qw(max);
+say max values %score;
+       
+