#include #include #define BAD_ARGS 1 int main(int argc, char *argv[]) { #define GRID_SIZE 300 static int cells[GRID_SIZE][GRID_SIZE]; int rack_id; int grid_serial; int largest_total = INT_MIN; int X, Y, Size; if (argc < 2 || sscanf(argv[1], "%d", &grid_serial) != 1 ) { return BAD_ARGS; } for (int i = 0; i < GRID_SIZE; i++) { int x = i + 1; rack_id = x + 10; for (int j = 0; j < GRID_SIZE; j++) { int y = j + 1; int power_level = rack_id * y; power_level += grid_serial; power_level *= rack_id; power_level = power_level % 1000 / 100; power_level -= 5; cells[i][j] = power_level; if (0) printf("%3d", power_level); } if (0) putchar('\n'); } for (int size = 1; size <= GRID_SIZE; size++) { for (int x = 1; x <= GRID_SIZE - size + 1; x++) { for (int y = 1; y <= GRID_SIZE - size + 1; y++) { int total_power = 0; for (int dx = -1; dx < size - 1; dx++) { for (int dy = -1; dy < size - 1; dy++) { total_power += cells[x+dx][y+dy]; } } if (total_power > largest_total) { largest_total = total_power; X = x; Y = y; Size = size; } } } } printf("%d,%d,%d\n", X, Y, Size); return 0; }