置換(Permutation)の計算 山中和義 2007/10/30 11:38:21 (修正1回) └つづき 山中和義 2007/10/30 11:39:25 (修正1回) ├サンプル(あみだくじ、カードのシャッフル... 山中和義 2007/10/30 11:42:06 (修正2回) │└!置換行列 山中和義 2007/10/31 19:32:35
Re: サンプル(あみだくじ、カードのシャッフル... |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2007/10/31 19:32:35 | |
!置換行列
SUB PermToMatrix(A(), M(,)) !置換行列を得る MAT M=ZER FOR i=1 TO UBOUND(A) LET M(i,A(i))=1 NEXT i END SUB SUB PermTranspositionToMatrix(i,j, M(,)) !基本変形を行う基本行列を得る MAT M=IDN LET M(i,i)=0 LET M(j,j)=0 LET M(i,j)=1 LET M(j,i)=1 END SUB !main !5本のあみだくじをつくる !A=(2 3)(1 2)(3 4)(2 3)(4 5)(3 4)(2 3) DIM A(5),B(5,5) PRINT "1 2 3 4 5" !上から順に、 PRINT "│││││" FOR i=1 TO UBOUND(A) !CALL PermIdentity(A) LET A(i)=i NEXT i PRINT "│├┤││" !2本目と3本目に横線を引く CALL PermTranspositionToMatrix(2,3,B) !CALL PermTransposition(2,3,B) MAT A=B*A !CALL PermMultiply(B,A, A) PRINT "││├┤│" !3本目と4本目に CALL PermTranspositionToMatrix(3,4,B) MAT A=B*A PRINT "│││├┤" !4本目と5本目に CALL PermTranspositionToMatrix(4,5,B) MAT A=B*A PRINT "│├┤││" !2本目と3本目に CALL PermTranspositionToMatrix(2,3,B) MAT A=B*A PRINT "││├┤│" !3本目と4本目に CALL PermTranspositionToMatrix(3,4,B) MAT A=B*A PRINT "├┤│││" !1本目と2本目に CALL PermTranspositionToMatrix(1,2,B) MAT A=B*A PRINT "│├┤││" !2本目と3本目に CALL PermTranspositionToMatrix(2,3,B) MAT A=B*A PRINT "│││││" MAT PRINT USING REPEAT$("# ",52): A !CALL PermPrintOut(A) !トランプカードのリフルシャッフル(左右のカードを1枚ずつ交互に重ねていく) LET m=52 !枚数 !1枚目のカードは、1枚目へ移動先する !2枚目のカードは、3枚目へ移動先する !3枚目のカードは、5枚目へ移動先する ! : !52枚目のカードは、52枚目へ移動先する DATA 1,3,5,7,9,11,13,15,17,19, 21,23,25,27,29,31,33,35,37,39, 41,43,45,47,49,51 DATA 2,4,6,8,10,12,14,16,18,20, 22,24,26,28,30,32,34,36,38,40, 42,44,46,48,50,52 !LET m=20 !DATA 1,3,5,7,9,11,13,15,17,19, 2,4,6,8,10,12,14,16,18,20 DIM s(m) MAT READ s DIM x(m,m) !置換行列 CALL PermToMatrix(s,x) DIM ss(m) FOR i=1 TO UBOUND(ss) !整列したカードを用意する LET ss(i)=i NEXT i FOR k=1 TO 20 !回数 MAT ss=x*ss !シャッフル PRINT "K=";k MAT PRINT USING REPEAT$("## ",m): ss !何回か実行すると元に戻る NEXT k END |
├!15パズルをつくる 山中和義 2007/10/30 21:46:16 (修正3回) └!ルービックキューブ(Rubik'scube、magicc... 山中和義 2007/11/01 21:07:01 (修正1回) └つづき 山中和義 2007/11/01 21:10:06 (修正1回)