这个问题的重点是创建最短且不滥用缓慢的数独求解器。这被定义为:当棋盘上有可能只有一位数的点时,不要递归。
这是迄今为止我在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"))
我将最后一行作为 cmd 行输入的一部分,它可以更改为:
import sys; R(map(int, sys.argv[1]);
这类似于其他数独高尔夫挑战,只是我想消除不必要的递归。任何语言都可以接受。挑战来了!