days 5-11

This commit is contained in:
Ben Charlton 2018-12-11 21:39:38 +00:00
parent d3ae65f625
commit 1d2d5def97
18 changed files with 804 additions and 0 deletions

53
11/1.pl Normal file
View file

@ -0,0 +1,53 @@
#!/usr/bin/perl
use strict;
use v5.10;
use Data::Dumper;
sub get_grid ($) {
my $serial = shift;
my @grid;
foreach my $y (1..300) {
my @x;
foreach my $x (1..300) {
my $pl = ((($x+10)*$y)+$serial)*($x+10);
$pl = (($pl / 100) % 10)-5;
push @x, $pl;
}
push @grid, \@x
}
return @grid;
}
#122,79, grid serial number 57: power level -5.
#my @grid=get_grid(57);
#say $grid[78][121];
#217,196, grid serial number 39: power level 0.
#@grid=get_grid(39);
#say $grid[195][216];
#101,153, grid serial number 71: power level 4.
#@grid=get_grid(71);
#say $grid[152][100];
my $serial = $ARGV[0];
my @grid = get_grid($serial);
my $biglytotal = -9999;
my $coords;
for (my $y=2; $y < 299; $y++) {
for (my $x=2; $x < 299; $x++) {
my $total = $grid[$y-1][$x-1] + $grid[$y-1][$x] + $grid[$y-1][$x+1] +
$grid[$y][$x-1] + $grid[$y][$x] + $grid[$y][$x+1] +
$grid[$y+1][$x-1] + $grid[$y+1][$x] + $grid[$y+1][$x+1];
if ($total > $biglytotal) {
$biglytotal = $total;
$coords = "$x,$y";
}
}
}
say $coords;

74
11/2.pl Normal file
View file

@ -0,0 +1,74 @@
#!/usr/bin/perl
use strict;
use v5.10;
use Data::Dumper;
my $serial = $ARGV[0];
my $maxsize = 300;
my @sat = get_grid($serial);
# calculate summed area table
for (my $y=0; $y < $maxsize; $y++) {
for (my $x=0; $x < $maxsize; $x++) {
my $tmp = $sat[$y][$x];
if (($y > 0) && ($x > 0)) {
$tmp -= $sat[$y-1][$x-1];
}
if ($y > 0) {
$tmp += $sat[$y-1][$x];
}
if ($x > 0) {
$tmp += $sat[$y][$x-1];
}
$sat[$y][$x] = $tmp;
}
}
my $biglytotal = -9999;
my $coords;
my $maxgs;
for (my $gridsize=1; $gridsize < 300; $gridsize++) {
for (my $y=0; $y < ($maxsize-$gridsize); $y++) {
for (my $x=0; $x < ($maxsize-$gridsize); $x++) {
my $total = get_total(\@sat, $x, $y, $gridsize);
if ($total > $biglytotal) {
$biglytotal = $total;
$coords = "result:" . ($x+2) . "," . ($y+2);
$maxgs = $gridsize;
}
}
}
}
say $coords, ",", $maxgs;
sub get_total {
my ($table, $x, $y, $gridsize) = @_;
return $$table[$y+$gridsize][$x+$gridsize] + $$table[$y][$x]
- $$table[$y][$x+$gridsize] - $$table[$y+$gridsize][$x];
}
sub get_grid ($) {
my $serial = shift;
my @grid;
foreach my $y (1..300) {
my @x;
foreach my $x (1..300) {
my $pl = ((($x+10)*$y)+$serial)*($x+10);
$pl = (($pl / 100) % 10)-5;
push @x, $pl;
}
push @grid, \@x
}
return @grid;
}