]> www.fi.muni.cz Git - aoc.git/blob - 2018/21.pl
Day 25: examining the input
[aoc.git] / 2018 / 21.pl
1 #!/usr/bin/perl -w
2
3 use v5.30;
4 use strict;
5
6 my $serial = shift @ARGV;
7
8 my %cache;
9 sub power_at {
10         my ($x, $y) = @_;
11         return $cache{$x,$y} if defined $cache{$x,$y};
12
13         my $rack_id = $x + 10;
14         my $power = ($rack_id * $y + $serial) * $rack_id;
15         $power = "000" . $power;
16         $power =~ s/.*(.)..\z/$1/;
17         $power -= 5;
18         return $cache{$x,$y} = $power;
19 }
20
21 my ($maxx, $maxy, $maxpwr);
22 for my $x (1 .. 300) {
23         for my $y (1 .. 300) {
24                 my $sum;
25                 for my $dx (0 .. 2) {
26                         next if $x + $dx > 300;
27                         for my $dy (0 .. 2) {
28                                 next if $y + $dy > 300;
29                                 $sum += power_at($x+$dx, $y+$dy);
30                         }
31                 }
32                 if (!defined $maxpwr || $sum > $maxpwr) {
33                         $maxpwr = $sum;
34                         $maxx = $x;
35                         $maxy = $y;
36                 }
37         }
38 }
39
40 say power_at(33,45);
41 say "$maxx,$maxy = $maxpwr";
42                         
43                 
44         
45         
46