29 lines
808 B
Nim
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: " "
|