置換(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 ├!15パズルをつくる 山中和義 2007/10/30 21:46:16 (修正3回)
Re: つづき |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2007/10/30 21:46:16 ** この記事は3回修正されてます | |
!15パズルをつくる
!main LET N=4 !縦横の数 N×N LET N2=N*N !空白のピース番号 DATA 1, 2, 3, 4 !初期値 DATA 5, 6, 7, 8 DATA 9,10,11,12 DATA 15,13,14,16 !※16は空白の意、空白は最後に! !DATA 13,15,14,16 DIM p(N2) !ピースの配置 MAT READ p CALL PrintOut(p) !結果を表示する IF PermSign(p)<0 THEN !パリティチェック PRINT "解法不能です。" STOP END IF DIM op(N2) !置換で表す DO DO INPUT pNo !移動するピース番号を指定する IF pNo>0 AND pNo<N2 THEN !ピース番号なら FOR i=1 TO UBOUND(p) !配置位置へ変換する IF pNo=p(i) THEN EXIT FOR NEXT i LET x=i IF x>N AND p(x-N)=N2 THEN EXIT DO !1つ上が空白なら移動させる IF MOD(x,N)<>1 AND p(x-1)=N2 THEN EXIT DO !左 IF MOD(x,N)<>0 AND p(x+1)=N2 THEN EXIT DO !右 IF x<N2-N+1 AND p(x+N)=N2 THEN EXIT DO !下 END IF LOOP CALL PermTransposition(pNo,N2, op) !配置上での隣接交換 CALL PermMultiply(op,p,p) CALL PrintOut(p) !結果を表示する LOOP UNTIL PermIsIdentity(p)<0 !整列したら PRINT "完成です!" SUB PrintOut(p()) !配置を表示する FOR i=1 TO N2 IF p(i)=N2 THEN PRINT " "; ELSE PRINT USING "###": p(i); IF MOD(i,N)=0 THEN PRINT NEXT i END SUB END |
└!ルービックキューブ(Rubik'scube、magicc... 山中和義 2007/11/01 21:07:01 (修正1回) └つづき 山中和義 2007/11/01 21:10:06 (修正1回)