つづき
EXTERNAL SUB GenPtn(ptn$,n, p(,),k,pn,z$,s, w(),wn) !パターン(ptn$)と一致するn桁ビット列の候補を生成する IF pn>0 THEN !順に埋めていく FOR i=s TO 0 STEP -1 LET t$="0"&REPEAT$("1",p(k,pn))&REPEAT$("0",i)&z$ !右側から CALL GenPtn(ptn$,n, p,k,pn-1,t$,s-i, w,wn) NEXT i ELSE !すべて埋まったら LET tmp$=right$(REPEAT$("0",n)&z$,n) !n桁 FOR i=1 TO n !(tmp XOR ptn) AND mask を考える LET tt$=ptn$(i:i) IF tt$<>"x" THEN !確定部分を確認する IF tmp$(i:i)<>tt$ THEN EXIT FOR END IF NEXT i IF i>n THEN !一致する候補を記録する LET wn=wn+1 FOR j=1 TO n LET w(j)=w(j)+VAL(tmp$(j:j)) !出現頻度 NEXT j END IF END IF END SUB
!スタック関連 EXTERNAL SUB push(stack$(),sp, v$(),M) !スタックに保存する IF sp<UBOUND(stack$) THEN FOR i=1 TO M LET stack$(sp+i)=v$(i) NEXT i LET sp=sp+M ELSE PRINT "スタックがオーバーフローです。" STOP END IF END SUB EXTERNAL SUB pop(stack$(),sp, v$(),M) !スタックから取り出す IF sp<1 THEN PRINT "スタックが空です。" STOP ELSE LET sp=sp-M FOR i=1 TO M LET v$(i)=stack$(sp+i) NEXT i END IF END SUB
|