nqueenplay
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.
Installation
This python package available on pip installation using
pip install nqueenplay
Requirements
Available on Python 3
Documentation
A to Z explanations to use this tool
Generate Random Puzzle
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
Generate Random Locked Puzzle
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)
Get Number of Queens
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
Get Queens Position
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
Check Number of 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
Show The Board
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
Show The Attack Pairs
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
Move The Queen
Queen is column locked, so you can only move one queen to a different row
Move the queen upside
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 the queen downside
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 the queen on specific neighbor
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 the queen to a random placement
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
Copyright
Free to use! Under MIT License.