我刚刚玩了 8 Queens 谜题_dvl
,k(v2)
发现k(v4)
. 我还检查了ngn k impls的其他k
版本,并找到了运算符 in ,例如在JohnEarnest 的 impl中: ^
k(v6)
l^a 或 l^l 除外。从 x 中删除每个 y 的所有实例。
k) 1 3 2 5 1 2 3^1 3 5 2 2
我真的很喜欢 SQL 风格,并希望将它应用到q
. 但是,以下方式是惯用的q/k(v4)
吗?它是一个好的解决方案吗?或者也许有更短的方法来做这样的列表比较/排除存在:
q)show s:til 8
0 1 2 3 4 5 6 7
q)s where not s in 2 4 6 /bother about this line, can it be shorter?
0 1 3 5 7
我的q8
代码版本比nsl k2的版本长一点,没有递归和没有条件:
f:{raze {(x,) each (til 8) where not (til 8) in {x,(x-f),x+f:reverse 1+til count x} x} each x}
\ts:10 7 f/til 8 /248 100128
count 7 f/til 8 /92
first 7 f/til 8 /0 4 7 5 2 6 1 3
更新:我正在寻找的命令是:
q)f:{raze {(x,) each (til 8) except {x,(x-f),x+f:reverse 1+til count x} x} each x}
Upd2:广义8皇后解决方案k(v4)
:
k){(x-1){,/{(x,)'(!y)@&~(!y)in{x,(x-f),x+f:|1+!#x}x}[;y]'x}[;x]/!x}8
Upd3:在博客中添加8 个皇后拼图