#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; 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 x = 1; x < GRID_SIZE - 1; x++) { for (int y = 1; y < GRID_SIZE - 1; y++) { int total_power = cells[x-1][y-1] + cells[x-1][y] + cells[x-1][y+1] + cells[x][y-1] + cells[x][y] + cells[x][y+1] + cells[x+1][y-1] + cells[x+1][y] + cells[x+1][y+1]; if (total_power > largest_total) { largest_total = total_power; X = x; Y = y; } } } printf("%d,%d\n", X, Y); return 0; }