GAIさんへのお返事です。
!2^6通りのビットパターンは、通常0~2^6-1の数に対応させる。
!この問題では、2^n 部分(重み)が、ビット位置と32,16,8,4,2,1の順番で対応いていない。
!だが、これをもとに生成されているものと仮定して、どのビットに対応しているか、グラフで確認する。
!6!通りの順列を生成して、より直線になるものが求める割付けとなる。
!まだ、この段階では重みは予想(近似値)となる。
!正解の重みを推測するためにグラフを検証する。(下図)
!重みは、(8,16,32,1,2,4)=(1*8,2*8,4*8,1,2,4) → (1*(8+3),2*(8+3),4*(8+3),1,2,4)=(11,22,44,1,2,4)
!げたは、10。
DIM W(6) !重み
DATA 32,16,8,4,2,1 !正解 11,22,44,1,2,4
MAT READ W
!1列目 010101 0:赤、1:黒
100 DATA 1,1,0,1,0,1, 48 !客が答えた赤黒のパターン、思っていた数
DATA 0,0,0,1,0,1, 15
DATA 0,1,1,1,0,1, 81
DATA 0,1,0,0,0,1, 36
DATA 0,1,0,1,1,1, 39
DATA 0,1,0,1,0,0, 33
!2列目 011110
DATA 1,1,1,1,1,0, 90
DATA 0,0,1,1,1,0, 57
DATA 0,1,0,1,1,0, 35
DATA 0,1,1,0,1,0, 78
DATA 0,1,1,1,0,0, 77
DATA 0,1,1,1,1,1, 83
!3列目 100011
DATA 0,0,0,0,1,1, 16
DATA 1,1,0,0,1,1, 49
DATA 1,0,1,0,1,1, 71
DATA 1,0,0,1,1,1, 28
DATA 1,0,0,0,0,1, 25
DATA 1,0,0,0,1,0, 23
!4列目 101101
DATA 0,0,1,1,0,1, 59
DATA 1,1,1,1,0,1, 92
DATA 1,0,0,1,0,1, 26
DATA 1,0,1,0,0,1, 69
DATA 1,0,1,1,1,1, 72
DATA 1,0,1,1,0,0, 66
!5列目 001110
DATA 1,0,1,1,1,0, 68
DATA 0,1,1,1,1,0, 79
DATA 0,0,0,1,1,0, 13
DATA 0,0,1,0,1,0, 56
DATA 0,0,1,1,0,0, 55
DATA 0,0,1,1,1,1, 61
!6列目 110011
DATA 0,1,0,0,1,1, 38
DATA 1,0,0,0,1,1, 27
DATA 1,1,1,0,1,1, 93
DATA 1,1,0,1,1,1, 50
DATA 1,1,0,0,0,1, 47
DATA 1,1,0,0,1,0, 45
!7列目 111000
DATA 0,1,1,0,0,0, 76
DATA 1,0,1,0,0,0, 65
DATA 1,1,0,0,0,0, 43
DATA 1,1,1,1,0,0, 88
DATA 1,1,1,0,1,0, 89
DATA 1,1,1,0,0,1, 91
SET WINDOW -5,100,-5,100
DIM P(6)
FOR t=0 TO fact(6)-1 !重みの順列を生成する
CALL Num2Perm(t,P,6)
RESTORE 100
CLEAR
DRAW grid(10,10)
FOR d=1 TO 6*7 !サンプル・データより
DIM B(6) !客が答えた赤黒のパターン
MAT READ B
READ y !思っていた数
LET x=0 !線形写像
FOR i=1 TO 6
LET x=x+W(P(i))*B(i)
NEXT i
PLOT POINTS: x,y !より直線になるのが候補!
NEXT d
FOR i=1 TO 6 !重みの順列を表示する
PRINT W(P(i));
NEXT i
PRINT
WAIT DELAY 0.3 !※調整が必要
NEXT t
END
!n!の順列パターン ⇔ 0~(n!-1)の番号
EXTERNAL FUNCTION Perm2Num(A(),N) !順列パターンに番号を付ける ※辞書式順序
LET v=0
FOR j=1 TO N-1 !※Nでは0
LET t=A(j)
LET v=v+fact(N-j)*(t-1)
FOR k=j+1 TO N
IF A(k)>t THEN LET A(k)=A(k)-1
NEXT k
NEXT j
LET Perm2Num=v
END FUNCTION
EXTERNAL SUB Num2Perm(h, A(),N) !番号から順列パターンを生成する ※辞書式順序
LET v=h
FOR j=1 TO N
LET fac=fact(N-j)
LET t=INT(v/fac)
LET A(j)=t+1 !1~N
LET v=v-fac*t
NEXT j
FOR j=N TO 1 STEP -1
FOR k=j+1 TO N
IF A(j)<=A(k) THEN LET A(k)=A(k)+1
NEXT k
NEXT j
END SUB