Я только что поиграл с головоломкой 8 Queens и обнаружил, что в k(v4)
нет оператора _dvl
(из k(v2)
). Также я проверил другие k
версии из ngn k impls и нашел оператор ^
в k(v6)
, например, в JohnEarnest's impl :
l ^ a или l ^ l кроме. Удалите все экземпляры каждого из y из x.
k) 1 3 2 5 1 2 3^1 3 5
2 2
Мне очень нравится стиль SQL, и я хотел бы применить его в q
. Но есть ли следующий способ идиоматии c в 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
Upd: команда, которую я искал, это за исключением :
q)f:{raze {(x,) each (til 8) except {x,(x-f),x+f:reverse 1+til count x} x} each x}
Upd2: обобщенное решение 8 Queens в k(v4)
:
k){(x-1){,/{(x,)'(!y)@&~(!y)in{x,(x-f),x+f:|1+!#x}x}[;y]'x}[;x]/!x}8
Upd3: добавить 8 королев головоломка в блог