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