32 lines
690 B
Plaintext
32 lines
690 B
Plaintext
func N_queens_solution(N = 8) {
|
|
|
|
func collision(field, row) {
|
|
for i in (^row) {
|
|
var distance = (field[i] - field[row])
|
|
distance ~~ [0, row-i, i-row] && return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func search(field, row) {
|
|
row == N && return field
|
|
for i in (^N) {
|
|
field[row] = i
|
|
if (!collision(field, row)) {
|
|
return (__FUNC__(field, row+1) || next)
|
|
}
|
|
}
|
|
return []
|
|
}
|
|
|
|
for i in (0 .. N>>1) {
|
|
if (var r = search([i], 1)) {
|
|
return r
|
|
}
|
|
}
|
|
}
|
|
|
|
for n in (1..15) {
|
|
say "#{'%2d' % n}: #{N_queens_solution(n) || 'No solution'}"
|
|
}
|