#include #include #define BAD_ARGS 1 int main(int argc, char *argv[]) { #define GRID_SIZE 300 static int cells[GRID_SIZE][GRID_SIZE]; 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; int 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 i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { int total_power = cells[i][j]; for ( int grow = 0; i + grow < GRID_SIZE && j + grow < GRID_SIZE; grow++ ) { for (int k = 0; k < grow; k++) { total_power += cells[i+grow][j+k] + cells[i+k][j+grow]; } if (grow) total_power += cells[i+grow][j+grow]; if (total_power > largest_total) { largest_total = total_power; x = i + 1; y = j + 1; size = grow + 1; } } } } printf("%d,%d,%d\n", x, y, size); return 0; }