6 my $serial = shift @ARGV;
11 return $cache{$x,$y} if defined $cache{$x,$y};
13 my $rack_id = $x + 10;
14 my $power = ($rack_id * $y + $serial) * $rack_id;
15 $power = "000" . $power;
16 $power =~ s/.*(.)..\z/$1/;
18 return $cache{$x,$y} = $power;
21 my ($maxx, $maxy, $maxpwr);
22 for my $x (1 .. 300) {
23 for my $y (1 .. 300) {
26 next if $x + $dx > 300;
28 next if $y + $dy > 300;
29 $sum += power_at($x+$dx, $y+$dy);
32 if (!defined $maxpwr || $sum > $maxpwr) {
41 say "$maxx,$maxy = $maxpwr";