#include #include #include static char *ReadLine(char *p, size_t size, FILE *fp) { if ((p=fgets(p, size, fp))) { size_t l = strlen(p); while(l && p[l-1] == '\n') { p[--l] = 0; } } return p; } static int Increment(char octo[10][10], int x, int y) { if (x >= 0 && x < 10 && y >=0 && y < 10) { if (octo[y][x] != 10) { octo[y][x]++; return octo[y][x] == 10; } else { return 0; } } else { return 0; } } static void Flash(char octo[10][10], int x, int y) { int f,n; for(f = -1; f < 2; f++) { for(n = -1; n < 2; n++) { if (Increment(octo, x + f, y + n)) { Flash(octo, x + f, y + n); } } } } int main(void) { char octo[10][10] = {0}; char toflash[10][10] = {0}; char buff[0x8000] = {0}; int flashes = 0; int f = 0; int y = 0; int x = 0; y = 0; while(ReadLine(buff, sizeof buff, stdin)) { for(f = 0; f < 10; f++) { octo[y][f] = buff[f] - '0'; } y++; } for(f = 0; f < 100; f++) { for(y = 0; y < 10; y++) { for(x = 0; x < 10; x++) { octo[y][x]++; } } for(y = 0; y < 10; y++) { for(x = 0; x < 10; x++) { toflash[y][x] = octo[y][x] == 10; } } for(y = 0; y < 10; y++) { for(x = 0; x < 10; x++) { if (toflash[y][x]) { Flash(octo, x, y); } } } /* if (f == 1) { for(y = 0; y < 10; y++) { for(x = 0; x < 10; x++) { if (octo[y][x] == 10) { printf("*"); } else { printf("%d", (int)octo[y][x]); } } printf("\n"); } } */ for(y = 0; y < 10; y++) { for(x = 0; x < 10; x++) { if (octo[y][x] == 10) { flashes++; octo[y][x] = 0; } } } } printf("flashes = %d\n", flashes); return 0; }