1 2 3 4 5 6 7 8
---------------------------------
8 | | | Q | | | | | | 8
---------------------------------
7 | | | | | Q | | | | 7
---------------------------------
6 | | | | | | | | Q | 6
---------------------------------
5 | | | | Q | | | | | 5
---------------------------------
4 | Q | | | | | | | | 4
---------------------------------
3 | | | | | | | Q | | 3
---------------------------------
2 | | Q | | | | | | | 2
---------------------------------
1 | | | | | | Q | | | 1
---------------------------------
1 2 3 4 5 6 7 8
nqueenplay
is N-Queens puzzle player. This tool will generate randomly or randomly locked puzzle, you may use this as "a boxing bag" to practice problem solving algorithm.
This python package available on pip installation using
pip install nqueenplay
Available on Python 3
A to Z explanations to use this tool
To generate a random puzzle you can do:
N = 4 # any integer
nqueens = NQueen(N)
or
N = 4 # any integer
nqueens = NQueen(n=N, number_lock=0) # 0 = no lock
Random locked mean the distribution of queen is randomize, and there is locking mechanism to make sure the queen position won't change for another run. To generate a random locked puzzle you can do:
N = 4 # any integer
lock = 1 # any integer
nqueens = NQueen(n=N, number_lock=lock)
To get number of queen:
N = 4
nqueens = NQueen(n=N, number_lock=1)
number_of_queen = nqueens.get_number_of_queens()
Output:
print(number_of_queen)
# 4
To get queen position:
N = 4
nqueens = NQueen(n=N, number_lock=1)
positions = nqueens.get_queen_positions()
Output:
print(positions)
# [(1, 1), (2, 4), (3, 3), (4, 2)]
Each tuple is The Queen coordinate, there is 4 attack pairs
To check how many attack pairs in the current board:
N = 4
nqueens = NQueen(n=N, number_lock=1)
pairs = nqueens.get_attack_pairs()
Output:
print(pairs)
# [[(1, 1), (3, 3)], [(2, 4), (3, 3)], [(2, 4), (4, 2)], [(3, 3), (4, 2)]]
Each tuple is The Queen coordinate, there is 4 attack pairs
To show the current board:
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
output:
1 2 3 4
-----------------
4 | | Q | | | 4
-----------------
3 | | | Q | | 3
-----------------
2 | | | | Q | 2
-----------------
1 | Q | | | | 1
-----------------
1 2 3 4
To show the current board attack pairs:
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show_attack_pairs()
output
# attack_pairs [(1, 3), (2, 3), (2, 4), (3, 4)]
# Number of attacking pair(s): 4
Queen is column locked, so you can only move one queen to a different row
Move Queen to upside with specific range:
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_up(queen_pos=1, movement_length=2)
nqueens.show()
output:
1 2 3 4
-----------------
4 | | Q | | | 4
-----------------
3 | | | Q | | 3
-----------------
2 | | | | Q | 2
-----------------
1 | Q | | | | 1
-----------------
1 2 3 4
1 2 3 4
-----------------
4 | | Q | | | 4
-----------------
3 | Q | | Q | | 3
-----------------
2 | | | | Q | 2
-----------------
1 | | | | | 1
-----------------
1 2 3 4
Move Queen to downside with specific range:
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_down(queen_pos=2, movement_length=2)
nqueens.show()
output:
1 2 3 4
-----------------
4 | | Q | | | 4
-----------------
3 | | | Q | | 3
-----------------
2 | | | | Q | 2
-----------------
1 | Q | | | | 1
-----------------
1 2 3 4
1 2 3 4
-----------------
4 | | | | | 4
-----------------
3 | | | Q | | 3
-----------------
2 | | Q | | Q | 2
-----------------
1 | Q | | | | 1
-----------------
1 2 3 4
Move Queen to a specific neighbor by neighbor row position:
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_to(queen_pos=2, target_pos=1)
nqueens.show()
output:
1 2 3 4
-----------------
4 | | Q | | | 4
-----------------
3 | | | Q | | 3
-----------------
2 | | | | Q | 2
-----------------
1 | Q | | | | 1
-----------------
1 2 3 4
1 2 3 4
-----------------
4 | | | | | 4
-----------------
3 | | | Q | | 3
-----------------
2 | | | | Q | 2
-----------------
1 | Q | Q | | | 1
-----------------
1 2 3 4
Move Queen to random place in the column:
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_random(queen_pos=3)
nqueens.show()
output:
1 2 3 4
-----------------
4 | | Q | | | 4
-----------------
3 | | | Q | | 3
-----------------
2 | | | | Q | 2
-----------------
1 | Q | | | | 1
-----------------
1 2 3 4
1 2 3 4
-----------------
4 | | Q | | | 4
-----------------
3 | | | | | 3
-----------------
2 | | | Q | Q | 2
-----------------
1 | Q | | | | 1
-----------------
1 2 3 4
Free to use! Under MIT License.