新しく発言する EXIT インデックスへ
1次元セルオートマトン

  1次元セルオートマトン 山中和義 2007/09/05 11:43:36 
  !ライフゲーム(Conway'sGameofLife)(2次... 山中和義 2007/09/07 20:53:06  (修正2回)
   └自己相似なパターン 山中和義 2007/09/17 13:57:04 

  1次元セルオートマトン 山中和義 2007/09/05 11:43:36  ツリーへ

1次元セルオートマトン 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/05 11:43:36

!1次元セルオートマトン(2状態3近傍)

SUB CellularAutomaton1D(Num,m,cell(),Cnt) !ルールNum、m個のセル、t=[0,Cnt-1]
DIM R(8) !ルールを得る
FOR i=1 TO 8
LET R(9-i)=VAL(mid$(right$(REPEAT$("0",7)&BSTR$(Num,2),8),i,1))
NEXT i


SET DRAW mode hidden !ちらつき防止(開始)

CLEAR

FOR i=1 TO m !初期状態を表示する
CALL SetPixel(i,0,cell(i))
NEXT i

FOR t=1 TO Cnt-1 !各時刻の状態を得る
LET c1=cell(m) !左端
LET c2=cell(1)
FOR i=1 TO m
IF i=m THEN !右端なら
LET c3=cell(1)
ELSE
LET c3=cell(i+1)
END IF

LET cell(i)=R((c1*2+c2)*2+c3 + 1) !左、中央、右の状態に応じて決定する
CALL SetPixel(i,t,cell(i)) !セルの状態を表示する

LET c1=c2 !次へ
LET c2=c3
NEXT i
NEXT t

SET DRAW mode explicit !ちらつき防止(終了)

PRINT "ルール";rule
END SUB

SUB SetPixel(x,y,c) !(x,y)の位置に点を描く
SET POINT STYLE 1
IF c=1 THEN PLOT POINTS:x,y
END SUB



LET N=800
DIM c(N) !1次元セル空間

SET BITMAP SIZE N,N/2 !表示領域(横長)
SET WINDOW 0,N,N/2,0 !ビットマップ座標 ※左上が原点、X軸は右へ、Y軸は下へ


!FOR p=0 TO 2^8-1 !256種類
!FOR p=30 TO 30
FOR p=90 TO 90
!FOR p=110 TO 110
!FOR p=184 TO 184
MAT c=ZER !初期値 t=0
LET c(N/2)=1

CALL CellularAutomaton1D(p,N,c,N/2)

WAIT DELAY 1
NEXT p

END

  !ライフゲーム(Conway'sGameofLife)(2次... 山中和義 2007/09/07 20:53:06  (修正2回) ツリーへ

Re: 1次元セルオートマトン 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/07 20:53:06 ** この記事は2回修正されてます
!ライフゲーム(Conway's Game of Life)(2次元セルオートマトン)

LET N=50 !大きさ
DIM c(0 TO N+1,0 TO N+1),nc(0 TO N+1,0 TO N+1) !2次元のセル ※0,N+1は番兵

! 1 2 3 4 5
! 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
DATA "□□□□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□□" !グライダー・ガン(gliderguns)
DATA "□□□□□□□□□□□□□□□□□□□□□□■□■□□□□□□□□□□□"
DATA "□□□□□□□□□□□□■■□□□□□□■■□□□□□□□□□□□□■■"
DATA "□□□□□□□□□□□■□□□■□□□□■■□□□□□□□□□□□□■■"
DATA "■■□□□□□□□□■□□□□□■□□□■■□□□□□□□□□□□□□□"
DATA "■■□□□□□□□□■□□□■□■■□□□□■□■□□□□□□□□□□□"
DATA "□□□□□□□□□□■□□□□□■□□□□□□□■□□□□□□□□□□□"
DATA "□□□□□□□□□□□■□□□■□□□□□□□□□□□□□□□□□□□□"
DATA "□□□□□□□□□□□□■■□□□□□□□□□□□□□□□□□□□□□□"

MAT c=ZER
LET i=1
DO
READ IF MISSING THEN EXIT DO: t$ !初期化する
FOR j=1 TO LEN(t$)
IF t$(j:j)="■" THEN LET c(j,i)=1 !i行、j列 ※MAT PLOT CELLS使用のため転置
NEXT j
LET i=i+1 !次へ
LOOP


LET g=1 !世代
DO
SET DRAW mode hidden !ちらつき防止(開始)
CLEAR

MAT PLOT CELLS, IN 0,1; 1,0: c !状態を表示する

PLOT TEXT ,AT 0.1,0.1: "世代="&STR$(g)
SET DRAW mode explicit !ちらつき防止(終了)


MAT nc=ZER

FOR i=1 TO N !次の世代へ
FOR j=1 TO N
LET c1=c(i-1,j-1)+c(i-1,j)+c(i-1,j+1) !上
LET c2=c(i,j-1)+c(i,j+1) !中央
LET c3=c(i+1,j-1)+c(i+1,j)+c(i+1,j+1) !下
LET cnt=c1+c2+c3 !周囲(ムーア近傍)のセルの状態を得る
!!!PRINT i;j;cnt !debug debug debug


IF c(i,j)=1 THEN !セルが「生」なら
IF cnt=2 OR cnt=3 THEN !維持!
LET nc(i,j)=1
ELSE !過疎、過密で死亡!
END IF
ELSE !「死」なら
IF cnt=3 THEN LET nc(i,j)=1 !誕生!
END IF
NEXT j
NEXT i

MAT c=nc !次へ
LET g=g+1
LOOP

END

   └自己相似なパターン 山中和義 2007/09/17 13:57:04  ツリーへ

Re: !ライフゲーム(Conway'sGameofLife)(2次... 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/17 13:57:04
自己相似なパターン

規則を変えるとフラクタルな図形が現れます。


●8の中から1つ

LET N=100 !大きさ
DIM c(0 TO N+1,0 TO N+1),nc(0 TO N+1,0 TO N+1) !2次元のセル ※0,N+1は番兵

MAT c=ZER
LET c(N/2,N/2)=1 !中央に1つ


LET g=1 !世代
DO
SET DRAW mode hidden !ちらつき防止(開始)
CLEAR

MAT PLOT CELLS, IN 0,1; 1,0: c !状態を表示する

PLOT TEXT ,AT 0.1,0.1: "世代="&STR$(g)
SET DRAW mode explicit !ちらつき防止(終了)


MAT nc=ZER

FOR i=1 TO N !次の世代へ
FOR j=1 TO N
LET c1=c(i-1,j-1)+c(i-1,j)+c(i-1,j+1) !上
LET c2=c(i,j-1)+c(i,j+1) !中央
LET c3=c(i+1,j-1)+c(i+1,j)+c(i+1,j+1) !下
LET cnt=c1+c2+c3 !周囲(ムーア近傍)のセルの状態を得る
!!!PRINT i;j;cnt !debug debug debug


LET nc(i,j)=c(i,j) !そのまま
IF cnt=1 THEN LET nc(i,j)=1 !誕生!
NEXT j
NEXT i

MAT c=nc !次へ
LET g=g+1
LOOP

END




●パリティ

LET N=100 !大きさ
DIM c(0 TO N+1,0 TO N+1),nc(0 TO N+1,0 TO N+1) !2次元のセル ※0,N+1は番兵

MAT c=ZER
LET N2=INT(N/2)
LET c(N2-1,N2-1)=1 !3×3の正方形
LET c(N2-1,N2)=1
LET c(N2-1,N2+1)=1

LET c(N2,N2-1)=1
LET c(N2,N2)=1
LET c(N2,N2+1)=1

LET c(N2+1,N2-1)=1
LET c(N2+1,N2)=1
LET c(N2+1,N2+1)=1


LET g=1 !世代
DO
SET DRAW mode hidden !ちらつき防止(開始)
CLEAR

MAT PLOT CELLS, IN 0,1; 1,0: c !状態を表示する

PLOT TEXT ,AT 0.1,0.1: "世代="&STR$(g)
SET DRAW mode explicit !ちらつき防止(終了)


MAT nc=ZER

FOR i=1 TO N !次の世代へ
FOR j=1 TO N
LET c1=c(i-1,j) !上
LET c2=c(i,j-1)+c(i,j)+c(i,j+1) !中央
LET c3=c(i+1,j) !下
LET cnt=c1+c2+c3 !周囲のセルの状態を得る
!!!PRINT i;j;cnt !debug debug debug


LET nc(i,j)=MOD(cnt,2) !パリティ(排他的論理和)
NEXT j
NEXT i

MAT c=nc !次へ
LET g=g+1
LOOP

END


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。