Peaceful chess queen armies: Difference between revisions
Content added Content deleted
(Added Wren) |
|||
Line 2,322: | Line 2,322: | ||
◦ • ◦ W ◦ • ◦ |
◦ • ◦ W ◦ • ◦ |
||
W ◦ W W • ◦ • </pre> |
W ◦ W W • ◦ • </pre> |
||
=={{header|Nim}}== |
|||
{{trans|Kotlin}} |
|||
Almost a direct translation except for "printBoard" where we have chosen to use a sequence of sequences to simplify the code. |
|||
<lang Nim>import sequtils, strformat |
|||
type |
|||
Piece {.pure.} = enum Empty, Black, White |
|||
Position = tuple[x, y: int] |
|||
func isAttacking(queen, pos: Position): bool = |
|||
queen.x == pos.x or queen.y == pos.y or abs(queen.x - pos.x) == abs(queen.y - pos.y) |
|||
func place(m, n: int; blackQueens, whiteQueens: var seq[Position]): bool = |
|||
if m == 0: return true |
|||
var placingBlack = true |
|||
for i in 0..<n: |
|||
for j in 0..<n: |
|||
block inner: |
|||
let pos: Position = (i, j) |
|||
for queen in blackQueens: |
|||
if queen == pos or not placingBlack and queen.isAttacking(pos): |
|||
break inner |
|||
for queen in whiteQueens: |
|||
if queen == pos or placingBlack and queen.isAttacking(pos): |
|||
break inner |
|||
if placingBlack: |
|||
blackQueens.add pos |
|||
else: |
|||
whiteQueens.add pos |
|||
if place(m - 1, n, blackQueens, whiteQueens): return true |
|||
discard blackQueens.pop() |
|||
discard whiteQueens.pop() |
|||
placingBlack = not placingBlack |
|||
if not placingBlack: |
|||
discard blackQueens.pop() |
|||
proc printBoard(n: int; blackQueens, whiteQueens: seq[Position]) = |
|||
var board = newSeqWith(n, newSeq[Piece](n)) # Initialized to Empty. |
|||
for queen in blackQueens: |
|||
board[queen.x][queen.y] = Black |
|||
for queen in whiteQueens: |
|||
board[queen.x][queen.y] = White |
|||
for i in 0..<n: |
|||
for j in 0..<n: |
|||
stdout.write case board[i][j] |
|||
of Black: "B " |
|||
of White: "W " |
|||
of Empty: (if (i and 1) == (j and 1): "• " else: "◦ ") |
|||
stdout.write '\n' |
|||
echo "" |
|||
const Nms = [(2, 1), (3, 1), (3, 2), (4, 1), (4, 2), (4, 3), |
|||
(5, 1), (5, 2), (5, 3), (5, 4), (5, 5), |
|||
(6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), |
|||
(7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7)] |
|||
for (n, m) in Nms: |
|||
echo &"{m} black and {m} white queens on a {n} x {n} board:" |
|||
var blackQueens, whiteQueens: seq[Position] |
|||
if place(m, n, blackQueens, whiteQueens): |
|||
printBoard(n, blackQueens, whiteQueens) |
|||
else: |
|||
echo "No solution exists.\n"</lang> |
|||
{{out}} |
|||
<pre>1 black and 1 white queens on a 2 x 2 board: |
|||
No solution exists. |
|||
1 black and 1 white queens on a 3 x 3 board: |
|||
B ◦ • |
|||
◦ • W |
|||
• ◦ • |
|||
2 black and 2 white queens on a 3 x 3 board: |
|||
No solution exists. |
|||
1 black and 1 white queens on a 4 x 4 board: |
|||
B ◦ • ◦ |
|||
◦ • W • |
|||
• ◦ • ◦ |
|||
◦ • ◦ • |
|||
2 black and 2 white queens on a 4 x 4 board: |
|||
B ◦ • ◦ |
|||
◦ • W • |
|||
B ◦ • ◦ |
|||
◦ • W • |
|||
3 black and 3 white queens on a 4 x 4 board: |
|||
No solution exists. |
|||
1 black and 1 white queens on a 5 x 5 board: |
|||
B ◦ • ◦ • |
|||
◦ • W • ◦ |
|||
• ◦ • ◦ • |
|||
◦ • ◦ • ◦ |
|||
• ◦ • ◦ • |
|||
2 black and 2 white queens on a 5 x 5 board: |
|||
B ◦ • ◦ B |
|||
◦ • W • ◦ |
|||
• W • ◦ • |
|||
◦ • ◦ • ◦ |
|||
• ◦ • ◦ • |
|||
3 black and 3 white queens on a 5 x 5 board: |
|||
B ◦ • ◦ B |
|||
◦ • W • ◦ |
|||
• W • ◦ • |
|||
◦ • ◦ B ◦ |
|||
• W • ◦ • |
|||
4 black and 4 white queens on a 5 x 5 board: |
|||
• B • B • |
|||
◦ • ◦ • B |
|||
W ◦ W ◦ • |
|||
◦ • ◦ • B |
|||
W ◦ W ◦ • |
|||
5 black and 5 white queens on a 5 x 5 board: |
|||
No solution exists. |
|||
1 black and 1 white queens on a 6 x 6 board: |
|||
B ◦ • ◦ • ◦ |
|||
◦ • W • ◦ • |
|||
• ◦ • ◦ • ◦ |
|||
◦ • ◦ • ◦ • |
|||
• ◦ • ◦ • ◦ |
|||
◦ • ◦ • ◦ • |
|||
2 black and 2 white queens on a 6 x 6 board: |
|||
B ◦ • ◦ B ◦ |
|||
◦ • W • ◦ • |
|||
• W • ◦ • ◦ |
|||
◦ • ◦ • ◦ • |
|||
• ◦ • ◦ • ◦ |
|||
◦ • ◦ • ◦ • |
|||
3 black and 3 white queens on a 6 x 6 board: |
|||
B ◦ • ◦ B B |
|||
◦ • W • ◦ • |
|||
• W • ◦ • ◦ |
|||
◦ • ◦ • ◦ • |
|||
• ◦ W ◦ • ◦ |
|||
◦ • ◦ • ◦ • |
|||
4 black and 4 white queens on a 6 x 6 board: |
|||
B ◦ • ◦ B B |
|||
◦ • W • ◦ • |
|||
• W • ◦ • ◦ |
|||
◦ • ◦ • ◦ B |
|||
• ◦ W W • ◦ |
|||
◦ • ◦ • ◦ • |
|||
5 black and 5 white queens on a 6 x 6 board: |
|||
• B • ◦ B ◦ |
|||
◦ • ◦ B ◦ B |
|||
W ◦ • ◦ • ◦ |
|||
W • W • ◦ • |
|||
• ◦ • ◦ • B |
|||
W • W • ◦ • |
|||
6 black and 6 white queens on a 6 x 6 board: |
|||
No solution exists. |
|||
1 black and 1 white queens on a 7 x 7 board: |
|||
B ◦ • ◦ • ◦ • |
|||
◦ • W • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
◦ • ◦ • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
◦ • ◦ • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
2 black and 2 white queens on a 7 x 7 board: |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
• ◦ • ◦ • ◦ • |
|||
◦ • ◦ • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
◦ • ◦ • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
3 black and 3 white queens on a 7 x 7 board: |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
B ◦ • ◦ • ◦ • |
|||
◦ • W • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
◦ • ◦ • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
4 black and 4 white queens on a 7 x 7 board: |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
• ◦ • ◦ • ◦ • |
|||
◦ • ◦ • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
5 black and 5 white queens on a 7 x 7 board: |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
B ◦ • ◦ • ◦ • |
|||
◦ • W • ◦ • ◦ |
|||
• ◦ • ◦ • ◦ • |
|||
6 black and 6 white queens on a 7 x 7 board: |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
B ◦ • ◦ B ◦ • |
|||
◦ • W • ◦ • W |
|||
• ◦ • ◦ • ◦ • |
|||
7 black and 7 white queens on a 7 x 7 board: |
|||
• B • ◦ • B • |
|||
◦ B ◦ • B • ◦ |
|||
• B • ◦ • B • |
|||
◦ • ◦ • B • ◦ |
|||
W ◦ W ◦ • ◦ W |
|||
◦ • ◦ W ◦ • ◦ |
|||
W ◦ W W • ◦ • |
|||
</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |