#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
); }
for(i=0;i<FieldSize;i++){
for(j=0;j<FieldSize;j++){
fscanf(fp
,"%d ",&field
[i
][j
]); }
}
}
/************************************************************************
(I,J)の周囲の8マスのうち 状態が1であるものを数える
************************************************************************/
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+i][J+j]の値が1のものを数える
ただし、I(/J)が 0 や FieldSize-1 のときには注意が必要 */
/*** この部分を自分で書く ***/
sum += ( (i||j)&&
((i_tmp = I+i) >= 0) && (i_tmp < FieldSize) &&
((j_tmp = J+j) >= 0) && (j_tmp < FieldSize) &&
(field[i_tmp][j_tmp])
);
}
}
return sum;
}
/************************************************************************
状態の更新
************************************************************************/
void update_field(int field[FieldSize][FieldSize]){
int i,j;
int around; /* 周囲の8マスのうち状態が1であるものの数 */
int new_field[FieldSize][FieldSize]; /* 次の状態 */
for(i=0;i<FieldSize;i++){
for(j=0;j<FieldSize;j++){
around=count(i,j,field);
/* 周囲に3つ1があれば次の状態は1 */
/*** この部分を自分で書く ***/
/* 周囲に2つ1があり、現在の状態が1であれば 次の状態は1 */
/*** この部分を自分で書く ***/
/* それ以外の場合は 0 */
/*** この部分を自分で書く ***/
new_field[i][j] = ( (around|field[i][j]) == 3 );
}
}
/* 次の状態の情報(new_field)を fieldにコピー */
/*** この部分を自分で書く ***/
(void)memcpy(field
,new_field
,sizeof(new_field
));
}
/************************************************************************
状態(field)の表示
************************************************************************/
void display(int field[FieldSize][FieldSize]){
int i,j;
/* field[i][j]が1であれば■を
0であれば□を表示する */
/*** この部分を自分で書く ***/
for(i=0;i<FieldSize;i++){
for(j=0;j<FieldSize;j++){
}
}
}
/************************************************************************
メインプログラム
************************************************************************/
int main(int argc, char *argv[]){
int t;
int field[FieldSize][FieldSize];
if(argc!=2){
printf("実行方法 : ./a.out 初期状態のファイル\n"); }
/* Linuxで実行する場合は //でコメントアウトしてあるところの
//を消すと表示のされ方が変わる */
//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;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgRmllbGRTaXplIDIwCiNkZWZpbmUgVGltZU1heCAyMAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICDjg5XjgqPjg7zjg6vjg4njga7liJ3mnJ/ljJYgKOODleOCoeOCpOODq+OBruiqreOBv+i+vOOBvykKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIGluaXRfZmllbGQoaW50IGZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXSwgY2hhciAqZm5hbWUpewogIGludCBpLGo7CiAgRklMRSAqZnA7CgogIGlmKChmcD1mb3BlbihmbmFtZSwiciIpKT09TlVMTCl7CiAgICBwcmludGYoImluaXRfZmllbGQoKTogQ2Fubm90IG9wZW4gXCIlc1wiXG4iLGZuYW1lKTsKICAgIGV4aXQoMSk7CiAgfQoKICBmb3IoaT0wO2k8RmllbGRTaXplO2krKyl7CiAgICBmb3Ioaj0wO2o8RmllbGRTaXplO2orKyl7CiAgICAgIGZzY2FuZihmcCwiJWQgIiwmZmllbGRbaV1bal0pOwogICAgfQogIH0KICBmY2xvc2UoZnApOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIChJLEop44Gu5ZGo5Zuy44GuOOODnuOCueOBruOBhuOBoSDnirbmhYvjgYwx44Gn44GC44KL44KC44Gu44KS5pWw44GI44KLCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW50IGNvdW50KGludCBJLCBpbnQgSiwgaW50IGZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXSl7CiAgaW50IGksajsKICBpbnQgaV90bXAsal90bXA7CiAgaW50IHN1bTsKICAKICBzdW09MDsKICBmb3IoaT0tMTtpPD0xO2krKyl7CiAgICBmb3Ioaj0tMTtqPD0xO2orKyl7CiAgICAgIC8qIGZpZWxkW0kraV1bSitqXeOBruWApOOBjDHjga7jgoLjga7jgpLmlbDjgYjjgosKICAgICAgICAg44Gf44Gg44GX44CBSSgvSinjgYwgMCDjgoQgRmllbGRTaXplLTEg44Gu44Go44GN44Gr44Gv5rOo5oSP44GM5b+F6KaBICovCiAgICAgIC8qKiog44GT44Gu6YOo5YiG44KS6Ieq5YiG44Gn5pu444GPICoqKi8KICAgICAgc3VtICs9ICggIChpfHxqKSYmCiAgICAgICAgICAgICAgICAoKGlfdG1wID0gSStpKSA+PSAwKSAmJiAoaV90bXAgPCBGaWVsZFNpemUpICYmCiAgICAgICAgICAgICAgICAoKGpfdG1wID0gSitqKSA+PSAwKSAmJiAoal90bXAgPCBGaWVsZFNpemUpICYmCiAgICAgICAgICAgICAgICAoZmllbGRbaV90bXBdW2pfdG1wXSkKICAgICAgICAgICAgICk7CiAgICB9CiAgfQogIHJldHVybiBzdW07Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIOeKtuaFi+OBruabtOaWsAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgdXBkYXRlX2ZpZWxkKGludCBmaWVsZFtGaWVsZFNpemVdW0ZpZWxkU2l6ZV0pewogIGludCBpLGo7CiAgaW50IGFyb3VuZDsgLyog5ZGo5Zuy44GuOOODnuOCueOBruOBhuOBoeeKtuaFi+OBjDHjgafjgYLjgovjgoLjga7jga7mlbAgKi8gICAgICAKICBpbnQgbmV3X2ZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXTsgIC8qIOasoeOBrueKtuaFiyAqLwoKICBmb3IoaT0wO2k8RmllbGRTaXplO2krKyl7CiAgICBmb3Ioaj0wO2o8RmllbGRTaXplO2orKyl7CiAgICAgIGFyb3VuZD1jb3VudChpLGosZmllbGQpOwogICAgICAvKiDlkajlm7Ljgasz44GkMeOBjOOBguOCjOOBsOasoeOBrueKtuaFi+OBrzEgKi8KICAgICAgLyoqKiDjgZPjga7pg6jliIbjgpLoh6rliIbjgafmm7jjgY8gKioqLwoKICAgICAgLyog5ZGo5Zuy44GrMuOBpDHjgYzjgYLjgorjgIHnj77lnKjjga7nirbmhYvjgYwx44Gn44GC44KM44GwIOasoeOBrueKtuaFi+OBrzEgKi8KICAgICAgLyoqKiDjgZPjga7pg6jliIbjgpLoh6rliIbjgafmm7jjgY8gKioqLwoKICAgICAgLyog44Gd44KM5Lul5aSW44Gu5aC05ZCI44GvIDAgKi8KICAgICAgLyoqKiDjgZPjga7pg6jliIbjgpLoh6rliIbjgafmm7jjgY8gKioqLwogICAgICBuZXdfZmllbGRbaV1bal0gPSAoIChhcm91bmR8ZmllbGRbaV1bal0pID09IDMgKTsKICAgICAgCiAgICB9CiAgfQoKICAvKiDmrKHjga7nirbmhYvjga7mg4XloLEobmV3X2ZpZWxkKeOCkiBmaWVsZOOBq+OCs+ODlOODvCAqLwogIC8qKiog44GT44Gu6YOo5YiG44KS6Ieq5YiG44Gn5pu444GPICoqKi8KICAodm9pZCltZW1jcHkoZmllbGQsbmV3X2ZpZWxkLHNpemVvZihuZXdfZmllbGQpKTsKCgp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIOeKtuaFiyhmaWVsZCnjga7ooajnpLoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIGRpc3BsYXkoaW50IGZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXSl7CiAgaW50IGksajsKCiAgLyogZmllbGRbaV1bal3jgYwx44Gn44GC44KM44Gw4pag44KSCiAgICAgICAgICAgICAgICAgIDDjgafjgYLjgozjgbDilqHjgpLooajnpLrjgZnjgosgKi8KICAvKioqIOOBk+OBrumDqOWIhuOCkuiHquWIhuOBp+abuOOBjyAqKiovCiAgZm9yKGk9MDtpPEZpZWxkU2l6ZTtpKyspewogICAgZm9yKGo9MDtqPEZpZWxkU2l6ZTtqKyspewogICAgICBwcmludGYoZmllbGRbaV1bal0/IuKWoCI6IuKWoSIpOwogICAgfQogICAgcHJpbnRmKCJcbiIpOwogIH0KCgoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIOODoeOCpOODs+ODl+ODreOCsOODqeODoAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pewoJaW50IHQ7CglpbnQgZmllbGRbRmllbGRTaXplXVtGaWVsZFNpemVdOwogCglpZihhcmdjIT0yKXsKCQlwcmludGYoIuWun+ihjOaWueazlSA6IC4vYS5vdXQg5Yid5pyf54q25oWL44Gu44OV44Kh44Kk44OrXG4iKTsKCX0KIAovKiBMaW51eOOBp+Wun+ihjOOBmeOCi+WgtOWQiOOBryAvL+OBp+OCs+ODoeODs+ODiOOCouOCpuODiOOBl+OBpuOBguOCi+OBqOOBk+OCjeOBrgovL+OCkua2iOOBmeOBqOihqOekuuOBruOBleOCjOaWueOBjOWkieOCj+OCiyAqLwogCi8vc3lzdGVtKCJjbGVhciIpOwoJaW5pdF9maWVsZChmaWVsZCwgYXJndlsxXSk7Ci8vZGlzcGxheShmaWVsZCk7Ci8vc2xlZXAoMSk7Ci8vc3lzdGVtKCJjbGVhciIpOwoJZm9yKHQ9MDt0PFRpbWVNYXg7dCsrKXsKCQl1cGRhdGVfZmllbGQoZmllbGQpOwoJCWRpc3BsYXkoZmllbGQpOwovL3NsZWVwKDEpOwovL3N5c3RlbSgiY2xlYXIiKTsKCX0KIAoJcmV0dXJuIDA7Cn0KIAogCg==