プチコンまとめWiki (初代/mkII)

投稿プログラム : ナンプレ解法@1画面

2011年04月07日投稿 / 投稿者 : 名無しさん / タグ : 投稿プログラム 実用ツール QRコード 初代対応 1画面プログラム

概要

ナンプレを解くだけのプログラムです。
表示が変わらないと寂しいので、試行錯誤の過程を表示するようにしてあります。

使い方

プログラム中のDATA文に、解きたいナンプレを入れて実行してください。
1〜9の数字はそのまま入力し、スペースは"0"で入力してください。

注意

1画面に収めたかったので、単純な総当りで解いています。
そのため、問題によっては解くのに恐ろしく時間がかかります。

また、エラー処理をしていないので、解けない問題を入れるとエラーで落ちます。

スクリーンショット・動画

ありません。

QR コード

プチコンmkII 向けの QR コードです。

左上から順番に決定する版

ABGNMPL1.png

候補が少ないところから決定する版

ABGNMPL2.png

プログラムリスト

左上から順番に決定する版

  • 2011/05/16 (月) 22:03:39 ラベルの後ろにDATA文が置けることがわかったので、2行ほど短縮
  1. CLEAR:DIM B(81),P(81),N(241)
  2. CLS:S=−1:T=−1:FOR P=0 TO 80
  3. IF P%9==0 THEN READ B$:? B$
  4. B(P)=VAL(MID$(B$,P%9,1)):NEXT
  5. FOR P=0 TO 80:IF B(P) GOTO @N
  6. FOR I=1TO 9:A(I)=1:NEXT:J=P%9
  7. K=(P−P%3)%9+P−P%27FOR I=0TO 8
  8. A(B(P−J+I))=0:A(B(J+I*9))=0
  9. A(B(K+I/3+I%3*9))=0NEXT:S=S+1
  10. P(S)=P:T=T+1N(T)=0FOR I=1TO 9
  11. IF A(I) THEN T=T+1:N(T)=I
  12. NEXT          :DATA 000000000
  13. FOR I=0 TO 1  :DATA 000000000
  14. P=P(S):S=S−1  :DATA 000000000
  15. I=N(T):T=T−1  :DATA 000000000
  16. LOCATE P%9,P/9:DATA 000000000
  17. ? I:B(P)=I    :DATA 000000000
  18. NEXT:S=S+1    :DATA 000000000
  19. @N            :DATA 000000000
  20. NEXT          :DATA 000000000

候補が少ないところから決定する版

候補が少ないところを優先して決定するようにした版です。
速度が重要であれば、こちらを入力してください。(2011/12/11 (日) 19:20:40)

  • 2012/01/04 (水) 22:35:19 さらにちょっとだけ高速化。ただしVer1.2でないと動作しなくなった。
  • 2012/01/05 (木) 23:48:19 根本的に見なおして更に高速化。
  • 2012/01/06 (金) 21:17:25 さらにもうちょっとだけ高速化。
  • 2012/01/07 (土) 20:15:31 変数名と配列サイズの見直し。
  1. CLEAR:DIM B(81),P(81),N(455)
  2. CLS:DIM A(81,10):FOR Q=0TO 80
  3. IF Q%9<1THEN R=10:READ B$:?B$
  4. B(Q)=VAL(MID$(B$,Q%9,1)):NEXT
  5. FOR S=0TO 80FOR I=D*810TO 809
  6. A(I/R,I%R)=1:NEXT:FOR I=0TO 1
  7. N=B(P)K=P%9L=(P−P%3)%9+P−P%27
  8. FOR J=(N<1)*9TO 8A(P−K+J,N)=0
  9. A(K+J*9,N)=0:Q=L+J/3+J%3*9
  10. A(Q,N)=0:NEXT:P=P+1I=D+(P>80)
  11. NEXT:D=10FOR Q=0TO 80C=R*B(Q)
  12. FOR N=C+1TO 9:C=C+A(Q,N):NEXT
  13. IF D>C THEN D=C:P=Q
  14. NEXT:IF D>9THEN END
  15. N(T)=0T=T+1FOR N=1TO 9:N(T)=N
  16. T=T+A(P,N)NEXT:DATA 000000000
  17. P(S)=P:S=S+1  :DATA 000000000
  18. FOR N=0 TO 1  :DATA 000000000
  19. S=S−1:P=P(S)  :DATA 000000000
  20. T=T−1:N=N(T)  :DATA 000000000
  21. LOCATE P%9,P/9:DATA 000000000
  22. ? N:B(P)=N    :DATA 000000000
  23. NEXT:P=P*(D>0):DATA 000000000
  24. LOCATE 0,9NEXT:DATA 000000000

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • : 何このDATA文、こんなのアリなんだ (2011/04/14 (木) 00:11:52)
  • 名無しさん : ありかよ・・・ (2011/05/01 (日) 10:00:21)
  • 名無しさん : かっこいいwwwM-FAN時代だったらすげー!!って騒がれてただろうなw (2011/05/11 (水) 16:10:35)
  • 名無しさん : ラベルの後ろにDATA文が置けるって、ラベル文の仕様とあからさまに矛盾してるなw 完全にバグだコレ (2011/05/17 (火) 00:05:00)
  • 名無しさん : いったん全て0でするとすぐ終わるが朝●新聞の●eとかについているナンプレを解くために何分かかるんだ、みたいな。解いてる途中に朝飯食えたわ。 (2011/11/21 (月) 17:24:26)
  • 名無しさん : 何言ってんだよ上の奴 まあそれはいいとして、何かおかしいですが、私は高評価つけます。 (2012/01/21 (土) 19:52:57)
  • 名無しさん : ロジックのも作れたら載せて (2012/03/03 (土) 18:27:32)
  • 名無しさん : おっ、ロジックおもろそう (2012/03/16 (金) 18:32:31)
  • 名無しさん : 早速朝日新○の数独やったけど超高速だった (2012/03/25 (日) 09:59:31)
  • とも : すごいwwwwww (2012/04/21 (土) 14:57:29)
  • 名無しさま : 16×16や12×12のナンプレ用プログラムは無理ですか?????? (2012/08/15 (水) 21:40:03)
  • 名無しさん : 総当たりにしても効率強化にしてもDSのスペックで追いつくあたり流石と思った   今更 (2013/07/02 (火) 23:32:27)
  • ねじ : ラベルの後ろにDATA分置けるの、自分のでも使ってみます。 (2013/11/07 (木) 23:00:36)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.030 秒 | このページの最終更新 : 2016/02/20 (土) 19:17:47 (1597d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30