新しく発言する  EXIT  インデックスへ

お絵かきロジックをプログラムで解く


  お絵かきロジックをプログラムで解く 山中和義 2008/05/16 18:59:24  (修正1回)
  つづき 山中和義 2008/05/16 19:00:30  (修正1回)
  │└つづき 山中和義 2008/05/16 19:02:01  (修正1回)
  │ └つづき 山中和義 2008/05/16 19:02:55  (修正1回)
Re: つづき  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/05/16 19:02:55 ** この記事は1回修正されてます
つづき

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
  イラストロジックが簡単に解ける! 片山博文MZ 2008/08/04 13:10:07 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。