challenge ライフゲーム

セルオートマトンに関するお題です. 
2次元タイプの'ライフゲーム'を実装して下さい. 
初期値としては10行10列程度の格子上の平面に0.3程度の人口(?)密度を考え, 
末端はループするようにして下さい. (例: 座標[-1, -1] = [10, 10])

それだけだと簡単すぎると思われる方は, 
過密状態で間引きが発生するような機能を組み込んで下さい. 
間引きは, 少なくともその後の1時間ステップにおける死亡率が, 
それをしなかった場合よりも小さくなれば結構です. 
(死亡率の最小化は複雑性が高すぎる感がありますし. )
サンプル:
t = 0
[ ][*][ ][ ][ ][ ][*][*][*][ ]
[ ][ ][ ][ ][*][ ][ ][*][*][ ]
[ ][ ][ ][*][ ][ ][*][ ][*][ ]
[*][ ][*][*][ ][ ][*][ ][ ][ ]
[ ][*][ ][ ][ ][ ][ ][ ][*][ ]
[*][ ][ ][ ][*][ ][*][*][ ][*]
[ ][*][ ][ ][ ][ ][*][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ][ ][*]
[*][ ][ ][ ][ ][ ][*][ ][ ][*]
[ ][ ][ ][ ][*][*][ ][ ][*][ ]
t = 1
[ ][ ][ ][ ][*][ ][ ][ ][ ][*]
[ ][ ][ ][ ][ ][*][ ][ ][ ][*]
[ ][ ][*][ ][*][*][*][ ][*][*]
[ ][*][ ][*][ ][ ][ ][ ][ ][*]
[ ][ ][*][*][ ][*][*][ ][*][ ]
[ ][*][ ][ ][ ][*][*][ ][*][*]
[ ][ ][ ][ ][ ][*][*][*][*][*]
[ ][ ][ ][ ][ ][ ][ ][ ][ ][*]
[*][ ][ ][ ][ ][*][ ][ ][*][ ]
[*][ ][ ][ ][ ][ ][ ][ ][ ][ ]

Posted feedbacks - なでしこ

ぴこぴこ動くので、多分間違ってないかと(^ ^;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
!変数宣言が必要
/*初期マップとは配列=,
"0,1,0,0,0,0,1,1,1,0
0,0,0,0,1,0,0,1,1,0
0,0,0,1,0,0,1,0,1,0
1,0,1,1,0,0,1,0,0,0
0,1,0,0,0,0,0,0,1,0
1,0,0,0,1,0,1,1,0,1
0,1,0,0,0,0,1,0,0,0
0,0,0,0,0,0,0,0,0,1
1,0,0,0,0,0,1,0,0,1
0,0,0,0,1,1,0,0,1,0"
wとは整数=9
hとは整数=9*/

初期マップとは配列=,
"0,0,0,0,0,0
0,0,0,1,1,0
0,0,0,1,1,0
0,1,1,0,0,0
0,1,1,0,0,0
0,0,0,0,0,0"

wとは整数=5
hとは整数=5
現マップとは配列=初期マップ
次マップとは配列
iとは整数
jとは整数
セル数とは整数
マップラベルとはラベル

マップラベル=現マップをマップ整形
1の間
    iで0からhまで繰り返す
        jで0からwまで繰り返す
            セル数=周囲セル数取得(現マップ,i,j,h,w)
            もし(現マップ[i,j]=0)ならば
                もし(セル数=3)ならば
                    次マップ[i,j]=1 #誕生
                違えば
                    次マップ[i,j]=0 #死亡
            違えば
                もし(セル数=2||セル数=3)ならば
                    次マップ[i,j]=1 #維持
                違えば
                    次マップ[i,j]=0 #死亡
    現マップ=次マップ
    マップラベル=現マップをマップ整形
    0.2秒待つ

●マップ整形(mapを)
    tmpとは文字列
    tmplineとは文字列
    mapを反復
        tmpline=対象の改行を""に置換
        tmpline=tmplineの0を" "に置換
        tmpline=tmplineの1を"■"に置換
        tmp=tmp&tmpline&改行
    tmpで戻る

●周囲セル数取得(map,y,x,h,w)
    nxとは整数
    nyとは整数
    countとは整数
    "{y-1},{x-1}
{y-1},{x}
{y-1},{x+1}
{y},{x-1}
{y},{x+1}
{y+1},{x-1}
{y+1},{x}
{y+1},{x+1}"を反復
        もし(対象[0,0]=-1)ならば
            ny=h
        違えば
            ny=対象[0,0]
        もし(対象[0,1]=-1)ならば
            nx=w
        違えば
            nx=対象[0,1]
        もし(map[ny,nx]=1)ならば
            count=count+1
    countで戻る

すいません、配列が範囲を超える場合の処理を書いてませんでしたorz

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
●周囲セル数取得(map,y,x,h,w)
    nxとは整数
    nyとは整数
    countとは整数
    "{y-1},{x-1}
{y-1},{x}
{y-1},{x+1}
{y},{x-1}
{y},{x+1}
{y+1},{x-1}
{y+1},{x}
{y+1},{x+1}"を反復
        もし(対象[0,0]=-1)ならば,ny=h
        違えば,もし(対象[0,0]=h+1)ならば,ny=0
        違えば,ny=対象[0,0]
        もし(対象[0,1]=-1)ならば,nx=w
        違えば,もし(対象[0,1]=w+1)ならば,nx=0
        違えば,nx=対象[0,1]
        もし(map[ny,nx]=1)ならば
            count=count+1
    countで戻る

Index

Feed

Other

Link

Pathtraq

loading...