|
> No.3466[元記事へ]
GAIさんへのお返事です。
確率分布の出し方というのがよくわかりませんが
とりあえず作ってみました。
また、裏向きのままの状態でなく、表向きになった状態を表しています。あしからず
RANDOMIZE
DIM A(10),B(10),M(1024)
FOR L=1 TO 1000 !'試行回数
MAT A=ZER !'カード全てを裏の状態とする
MAT B=ZER
LET S=0
DO
DO
LET I=INT(RND*10)+1 !'任意の位置のカード
LOOP UNTIL A(I)=0 !'裏向きのカードなら
IF RND<.5 THEN LET I=I+3 ELSE LET I=I-3 !'右回り、左回りに相当
IF I>10 THEN LET I=I-10
IF I<1 THEN LET I=I+10
LET A(I)=1 !'表向きにする
LET FL=0
FOR J=1 TO 10
IF A(J)<>B(J) THEN
LET FL=1 !'前回と違うなら
LET S=0
END IF
NEXT J
IF FL=0 THEN LET S=S+1 !'前回と同じ状態ならカウント
IF S>10 THEN !'同じ状態が10回続くなら
LET Z=0
FOR J=1 TO 10
LET Z=Z*2+A(J) !'各状態を2進法とみなす
NEXT J
LET M(Z)=M(Z)+1 !'カウントする
EXIT DO
END IF
MAT B=A !'状態をコピー
LOOP
NEXT L
MAT B=ZER
FOR I=1 TO 1024 !'各状態の表示
IF M(I)>0 THEN
PRINT RIGHT$("000000000"&BSTR$(I,2),10);" ";M(I)
LET N=BITCOUNT32(I) !'bitの数
LET B(N)=B(N)+M(I)
END IF
NEXT I
PRINT
FOR I=1 TO 10
PRINT I;B(I)
NEXT I
END
EXTERNAL FUNCTION BITCOUNT32(X) !'32bitの中の"1"の数
LET X=BITAND(X,BVAL("55555555",16))+BITAND(INT(X/2),BVAL("55555555",16))
LET X=BITAND(X,BVAL("33333333",16))+BITAND(INT(X/4),BVAL("33333333",16))
LET X=BITAND(X,BVAL("0F0F0F0F",16))+BITAND(INT(X/16),BVAL("0F0F0F0F",16))
LET X=BITAND(X,BVAL("00FF00FF",16))+BITAND(INT(X/256),BVAL("00FF00FF",16))
LET X=BITAND(X,BVAL("0000FFFF",16))+BITAND(INT(X/65536),BVAL("0000FFFF",16))
LET BITCOUNT32=X
END FUNCTION
|
|