この質問のポイントは、乱暴に遅くない最短の数独ソルバーを作成することです。これは次のように定義されています:ボード上に 1 桁しかない可能性があるスポットがある場合は再帰しないでください。
これは私がこれまでPythonで持っていた最短のものです:
r=range(81)
s=range(1,10)
def R(A):
bzt={}
for i in r:
if A[i]!=0: continue;
h={}
for j in r:
h[A[j]if(j/9==i/9 or j%9==i%9 or(j/27==i/27)and((j%9/3)==(i%9/3)))else 0]=1
bzt[9-len(h)]=h,i
for l,(h,i)in sorted(bzt.items(),key=lambda x:x[0]):
for j in s:
if j not in h:
A[i]=j
if R(A):return 1
A[i]=0;return 0
print A;return 1
R(map(int, "080007095010020000309581000500000300400000006006000007000762409000050020820400060"))
コマンドライン入力の一部として使用する最後の行は、次のように変更できます。
import sys; R(map(int, sys.argv[1]);
これは、不必要な再帰を排除したいという点を除けば、他の数独ゴルフ チャレンジと似ています。どの言語でも構いません。チャレンジ開始!