RosettaCodeData/Task/N-queens-problem/Nim/n-queens-problem.nim
2023-07-01 13:44:08 -04:00

29 lines
808 B
Nim

const BoardSize = 8
proc underAttack(col: int; queens: seq[int]): bool =
if col in queens: return true
for i, x in queens:
if abs(col - x) == queens.len - i:
return true
return false
proc solve(n: int): seq[seq[int]] =
result = newSeq[seq[int]]()
result.add(@[])
var newSolutions = newSeq[seq[int]]()
for row in 1..n:
for solution in result:
for i in 1..BoardSize:
if not underAttack(i, solution):
newSolutions.add(solution & i)
swap result, newSolutions
newSolutions.setLen(0)
echo "Solutions for a chessboard of size ", BoardSize, 'x', BoardSize
echo ""
for i, answer in solve(BoardSize):
for row, col in answer:
if row > 0: stdout.write ' '
stdout.write chr(ord('a') + row), col
stdout.write if i mod 4 == 3: "\n" else: " "