1
0
www.mikescher.com/www/statics/aoc/2018/11_solution-2.linq
2019-12-02 14:27:20 +01:00

34 lines
890 B
C#

<Query Kind="Statements" />
int serial_num = int.Parse(File.ReadAllText(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), @"11_input.txt")));
int[,] scache = new int[301, 301];
for (int x = 1; x <= 300; x++) for (int y = 1; y <= 300; y++) scache[x, y] = (((x + 10) * ((x + 10) * y + serial_num) / 100) % 10) - 5;
int[,] cache = new int[301, 301];
for (int x = 1; x <= 300; x++) for (int y = 1; y <= 300; y++) cache[x, y] = 0;
var max = (pow:0, x:0,y:0,s:0);
for (int s = 1; s <= 300; s++)
{
for (int x = 1; x <= 1+ 300-s; x++)
{
for (int y = 1; y <= 1 + 300 - s; y++)
{
var v = cache[x, y];
for (int ix = 0; ix < s; ix++) v += scache[x + ix, y + s - 1];
for (int iy = 0; iy < s-1; iy++) v += scache[x + s - 1, y + iy];
cache[x,y]=v;
if (v > max.pow) max = (v,x,y,s);
}
}
Util.Progress = (s*100)/300;
}
$"{max.x},{max.y},{max.s}".Dump();