#include <stdio.h>
#include <stdlib.h>
#include <unistd.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
]); }
}
}
int count(int x, int y, int field[FieldSize][FieldSize])
{
int i, j;
int sum;
sum = 0;
for(i = x-1; i <= x+1; i++) {
for(j = y-1; j <= y+1; j++) {
if( i>=0 && i<FieldSize
&& j>=0 && j<FieldSize
&& field[i][j]==1 ){
sum++;
}
}
}
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);
/* 生死判定の条件 周囲が2つか3つ生きているとき生存 それ以外死亡 */
if((around >= 2) && (around <= 3)) {
new_field[i][j] = 1;
} else {
new_field[i][j] = 0;
}
}
}
for(i = 0; i < FieldSize; i++) {
for(j = 0; j < FieldSize; j++) {
field[i][j] = new_field[i][j];
}
}
}
void display(int field[FieldSize][FieldSize])
{
int i, j;
for(i = 0; i < FieldSize; i++) {
for(j = 0; j < FieldSize; j++) {
if(field[i][j] == 1) {
} else {
}
}
}
}
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);
for(t = 0; t < TimeMax; t++) {
update_field(field);
display(field);
sleep(1);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2RlZmluZSBGaWVsZFNpemUgMjAKI2RlZmluZSBUaW1lTWF4IDIwCgovKuODleOCo+ODvOODq+ODieOBruWIneacn+WMliAo44OV44Kh44Kk44Or44Gu6Kqt44G/6L6844G/KSovCnZvaWQgaW5pdF9maWVsZChpbnQgZmllbGRbRmllbGRTaXplXVtGaWVsZFNpemVdLCBjaGFyICpmbmFtZSkKewogICAgaW50IGksIGo7CiAgICBGSUxFICpmcDsKCiAgICBpZigoZnAgPSBmb3BlbihmbmFtZSwgInIiKSkgPT0gTlVMTCkgewogICAgICAgIHByaW50ZigiaW5pdF9maWVsZCgpOiBDYW5ub3Qgb3BlbiBcIiVzXCJcbiIsIGZuYW1lKTsKICAgICAgICBleGl0KDEpOwogICAgfQoKICAgIGZvcihpID0gMDsgaSA8IEZpZWxkU2l6ZTsgaSsrKSB7CiAgICAgICAgZm9yKGogPSAwOyBqIDwgRmllbGRTaXplOyBqKyspIHsKICAgICAgICAgICAgZnNjYW5mKGZwLCAiJWQgIiwgJmZpZWxkW2ldW2pdKTsKICAgICAgICB9CiAgICB9CiAgICBmY2xvc2UoZnApOwp9CgppbnQgY291bnQoaW50IHgsIGludCB5LCBpbnQgZmllbGRbRmllbGRTaXplXVtGaWVsZFNpemVdKQp7CiAgICBpbnQgaSwgajsKICAgIGludCBzdW07CgogICAgc3VtID0gMDsKICAgIGZvcihpID0geC0xOyBpIDw9IHgrMTsgaSsrKSB7CiAgICAgICAgZm9yKGogPSB5LTE7IGogPD0geSsxOyBqKyspIHsKICAgICAgICAgICAgaWYoIGk+PTAgJiYgaTxGaWVsZFNpemUKICAgICAgICAgICAgICYmIGo+PTAgJiYgajxGaWVsZFNpemUKICAgICAgICAgICAgICYmIGZpZWxkW2ldW2pdPT0xICl7CiAgICAgICAgICAgICAgICBzdW0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdW07Cn0KCnZvaWQgdXBkYXRlX2ZpZWxkKGludCBmaWVsZFtGaWVsZFNpemVdW0ZpZWxkU2l6ZV0pCnsKICAgIGludCBpLCBqOwogICAgaW50IGFyb3VuZDsKICAgIGludCBuZXdfZmllbGRbRmllbGRTaXplXVtGaWVsZFNpemVdOwoKICAgIGZvcihpID0gMDsgaSA8IEZpZWxkU2l6ZTsgaSsrKSB7CiAgICAgICAgZm9yKGogPSAwOyBqIDwgRmllbGRTaXplOyBqKyspIHsKICAgICAgICAgICAgYXJvdW5kID0gY291bnQoaSwgaiwgZmllbGQpOwogICAgICAgICAgICAvKiDnlJ/mrbvliKTlrprjga7mnaHku7Yg5ZGo5Zuy44GMMuOBpOOBizPjgaTnlJ/jgY3jgabjgYTjgovjgajjgY3nlJ/lrZgg44Gd44KM5Lul5aSW5q275LqhICovCiAgICAgICAgICAgIGlmKChhcm91bmQgPj0gMikgJiYgKGFyb3VuZCA8PSAzKSkgewogICAgICAgICAgICAgICAgbmV3X2ZpZWxkW2ldW2pdID0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5ld19maWVsZFtpXVtqXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IoaSA9IDA7IGkgPCBGaWVsZFNpemU7IGkrKykgewogICAgICAgIGZvcihqID0gMDsgaiA8IEZpZWxkU2l6ZTsgaisrKSB7CiAgICAgICAgICAgIGZpZWxkW2ldW2pdID0gbmV3X2ZpZWxkW2ldW2pdOwogICAgICAgIH0KICAgIH0KfQoKCnZvaWQgZGlzcGxheShpbnQgZmllbGRbRmllbGRTaXplXVtGaWVsZFNpemVdKQp7CiAgICBpbnQgaSwgajsKCiAgICBmb3IoaSA9IDA7IGkgPCBGaWVsZFNpemU7IGkrKykgewogICAgICAgIGZvcihqID0gMDsgaiA8IEZpZWxkU2l6ZTsgaisrKSB7CiAgICAgICAgICAgIGlmKGZpZWxkW2ldW2pdID09IDEpIHsKICAgICAgICAgICAgICAgIHByaW50Zigi4pagIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwcmludGYoIuKWoSIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KCn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIGludCB0OwogICAgaW50IGZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXTsKCiAgICBpZihhcmdjICE9IDIpIHsKICAgICAgICBwcmludGYoIuWun+ihjOaWueazlSA6IC4vYS5vdXQg5Yid5pyf54q25oWL44Gu44OV44Kh44Kk44OrXG4iKTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgLy9zeXN0ZW0oImNsZWFyIik7CiAgICBpbml0X2ZpZWxkKGZpZWxkLCBhcmd2WzFdKTsKICAgIGRpc3BsYXkoZmllbGQpOwogICAgLy9zbGVlcCgxKTsKICAgIHN5c3RlbSgiY2xlYXIiKTsKICAgIGZvcih0ID0gMDsgdCA8IFRpbWVNYXg7IHQrKykgewogICAgICAgIHVwZGF0ZV9maWVsZChmaWVsZCk7CiAgICAgICAgZGlzcGxheShmaWVsZCk7CiAgICAgICAgc2xlZXAoMSk7CiAgICAgICAgc3lzdGVtKCJjbGVhciIpOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==