]> www.fi.muni.cz Git - aoc.git/blob - 2018/43.pl
Day 25: examining the input
[aoc.git] / 2018 / 43.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5 use feature 'multidimensional';
6
7 my $depth = 11739;
8 my ($tx, $ty) = (11,718);
9
10 my %gi;
11 sub gi2el($gi) { ($gi + $depth) % 20183 }
12 my %el;
13
14 my $sum = 0;
15 for my $n (1 .. $tx + $ty) {
16         my $y = 0;
17         my $x = $n;
18         for my $i (0 .. $n) {
19                 if (($x == 0 && $y == 0) || ($x == $tx && $y == $ty)) {
20                         $gi{$x,$y} = 0;
21                 } elsif ($y == 0) {
22                         $gi{$x,$y} = 16807*$x;
23                 } elsif ($x == 0) {
24                         $gi{$x,$y} = 48271*$y;
25                 } else {
26                         $gi{$x,$y} = $el{$x-1,$y} * $el{$x,$y-1};
27                 }
28                 $el{$x,$y} = gi2el($gi{$x,$y});
29                 $sum += $el{$x,$y} % 3
30                         if $x <= $tx && $y <= $ty;
31                 $y++;
32                 $x--;
33         }
34 }
35
36 say $sum;
37
38