嵌套函数的某些层为什么会被跳过
mathematica吧
全部回复
仅看楼主
level 14
tiansmart1016 楼主
t = Now;
dat = ToExpression@*Characters /@ StringSplit[#, "\n"] & /@
StringSplit[Import[NotebookDirectory[] <> "simple sudoku.txt"],
RegularExpression["Grid [0-9]{2}\n"]];
check = Function[{a, x, y,
i}, (MemberQ[a[[x, All]], i] || MemberQ[a[[All, y]], i] ||
MemberQ[a[[3*Floor[(x - 1)/3] + 1 ;; 3*Floor[(x - 1)/3] + 3,
3*Floor[(y - 1)/3] + 1 ;; 3*Floor[(y - 1)/3] + 3]] //
Flatten, i])];
solve[sudo_] :=
Module[{a, b}, a = sudo; b = sudo;
Reap@Activate@
Fold[Do[If[check[b, #2[[1]], #2[[2]], i], Continue[]];
b[[#2[[1]],
#2[[2]]]] = i; #
1, {i, 1, 9}] &,
Inactivate[Throw@b]; Sow@b, a~Position~0]]
solve[dat[[1]]]
Now - t
这里dat[[1]]是一个数独。。。但是不知道为什么解出来的数独还是有空位,用print跟踪的结果是它跳过了这些格子,也不知道为什么。dat[[1]]=
{{0, 0, 3, 0, 2, 0, 6, 0, 0}, {9, 0, 0, 3, 0, 5, 0, 0, 1}, {0, 0, 1,
8, 0, 6, 4, 0, 0}, {0, 0, 8, 1, 0, 2, 9, 0, 0}, {7, 0, 0, 0, 0, 0,
0, 0, 8}, {0, 0, 6, 7, 0, 8, 2, 0, 0}, {0, 0, 2, 6, 0, 9, 5, 0,
0}, {8, 0, 0, 2, 0, 3, 0, 0, 9}, {0, 0, 5, 0, 1, 0, 3, 0, 0}}
2018年02月04日 13点02分 1
1