読者です 読者をやめる 読者になる 読者になる

ライフゲーム

game of life 9 of 9

ライフ・ゲームの初代行列をフリーハンドで設定する。 local n = 1 -- 世代番号の初期値 local stringPen = "PEN UP" local stringEraser = "ERASER UP" local posX, posY = 0, 0 local posC, posR = 1, 1 local penDown = false local eraserDown = false l…

game of life 8

初代行列をフリーハンドで設定する。 local stringPen = "PEN UP" local stringEraser = "ERASER UP" local posX, posY = 0, 0 local posC, posR = 1, 1 local penDown = false local eraserDown = false -- 行列のサイズを決める。 local rdim, cdim = 7, 7…

game of life 7

212 行 × 212 列: -- 世代番号の初期値 local n = 1 -- セルの一辺の長さを決める。 local sideLen = 1 -- ここに初代行列を入れる。 local mat_now = -- 例: --[[ {{1,1,1}, {1,1,1}, {1,1,1}} --]] --行数、列数を取得する。 local rdim, cdim = #mat_no…

game of life 6

計算手順は変えずに lua だけで実装した。 エミュレーターではかなり速くなったがハンドヘルドではあいかわらず遅い。 100 行 × 100 列(初代行列はここから拝借した): 106 行 × 159 列(初代行列は乱数): 212 行 × 318 列(ハンドヘルド・ビューの 1 画…

game of life 5

nspire で作ったユーザー定義函数と lua とを組み合わせる。 エミュレーターでわずか 23 行 × 35 列を 1 世代を更新するのに 0.1 秒もかかっている。 ハンドヘルド本体では遅すぎて使いものにならない。 こんなアルゴリズムではだめだということである。 Def…

game of life 4

行列の要素の値が 1 だったらその位置に色を塗る。行列は nspire の乱数函数で用意した。 local sideLen = 10 local mat = var.recall("mat") function on.paint(gc) for r = 1, #mat do for c = 1, #mat[1] do if mat[r][c] == 1 then gc:fillRect((c - 1) …

game of life 3

ルール表に従って行列を書き換える。引数は、n 世代行列(mat)とルール行列(mat_rule)。 返値は、n + 1 世代行列。 ルール表: 0 0 0 1 0 0 0 0 0 現在死セルの次の状態 0 0 1 1 0 0 0 0 0 現在生セルの次の状態 0 1 2 3 4 5 6 7 8 ムーア近傍の合計値 グ…

game of life 2

最外周以外のすべてのセルのムーア近傍(Moore neighborhood)の和を求める。 最外周のセルを削除してから返す。 Define moore_sum(mat_torus)= Func :©最外周以外のすべてのセルのムーア近傍の和を求める。 :Local rdim,cdim,mat_temp,r,c,temp : :©ムーア…

game of life 1

境界条件は周期境界条件(torus)とする。 以下のプログラムで上下左右のセルをコピーし合う。 Define conv_to_torus(mat)= Func :©行列の上下左右をつなぐ。 :Local rdim,cdim,mat_top,mat_bottom,mat_temp,mat_left,mat_right : :©上端行を下端行の下に挿…