#include <stdio.h>
#include <stdlib.h>

#define FieldSize 20
#define TimeMax 20

/*フィールドの初期化 (ファイルの読み込み)*/
void init_field(int field[FieldSize][FieldSize], char *fname){
  int i,j;
  FILE *fp;

  if((fp=fopen(fname,"r"))==NULL){
    printf("init_field(): Cannot open \"%s\"\n",fname);
    exit(1);
  }

  for(i=0;i<FieldSize;i++){
    for(j=0;j<FieldSize;j++){
      fscanf(fp,"%d ",&field[i][j]);
    }
  }
  fclose(fp);
}

int count(int I, int J, int field[FieldSize][FieldSize]){
  int i,j;
  int i_tmp,j_tmp;
  int sum;
  
  sum=0;
  for(i=-1;i<=1;i++){
    for(j=-1;j<=1;j++){
   
	field[i][j]=getrand(0,1);
    }
  }
  return sum;
}

void update_field(int field[FieldSize][FieldSize]){
  int i,j;
  int around;       
  int new_field[FieldSize][FieldSize]; 

  for(i=0;i<FieldSize;i++){
    for(j=0;j<FieldSize;j++){
      around=count(i,j,field);
    
if( (new_field[i][j] >= 3) && !(field[i][j]) ) {
    field[i][j]=1;
  }
  /* ˆÛŽ */
  else if ( ((new_field[i][j] == 2) || (new_field[i][j] == 3)) && (field[i][j]) ) {
    field[i][j]=1;
  }
  /* Ž€–S(‚»‚êˆÈŠO) */
  else {
    field[i][j]=0;
  }
  new_field[i][j]=0;
}

    }
	for(i = 0;i < 20;i++){
		for(j = 0;j < 20;j++){
			field[i][j] = new_field[i][j];
		}
	}
 
	for(i=0;i<20;i++){
		for(j=0;j<20;j++){
		field[i][j] = new_field[i][j];
		if(field[i][j]==1){
			printf("■");
			}else{
			printf("□");
			}		
		}	
	printf("\n");
}
}


void display(int field[FieldSize][FieldSize]){
  int i,j;


for(i=0;i<20;i++){
	for(j=0;j<20;j++){
		if(field[i][j]==1){
			printf("■");
			}else{
			printf("□");
			}	
		}	
	printf("\n");
}

}

int main(int argc, char *argv[]){
  int t;
  int field[FieldSize][FieldSize];
  
  if(argc!=2){
    printf("実行方法 : ./a.out 初期状態のファイル\n");
  }

  //system("clear");
  init_field(field, argv[1]);
  //display(field);
  //sleep(1);
  //system("clear");
  for(t=0;t<TimeMax;t++){
    update_field(field);
    display(field);
    //sleep(1);
    //system("clear");
  }

  return 0;
}






