https://github.com/rizquuula/nqueenplay
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.
https://github.com/rizquuula/nqueenplay
algorithm n-queens nqueens puzzle
Last synced: 6 months ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/rizquuula/nqueenplay
- Owner: rizquuula
- License: mit
- Created: 2022-09-09T10:40:41.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2022-09-21T03:32:30.000Z (about 3 years ago)
- Last Synced: 2025-03-19T19:49:32.779Z (7 months ago)
- Topics: algorithm, n-queens, nqueens, puzzle
- Language: Python
- Homepage: https://pypi.org/project/nquuenplay
- Size: 45.9 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# nqueenplay
```py
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:
```py
N = 4 # any integer
nqueens = NQueen(N)
```or
```py
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:
```py
N = 4 # any integer
lock = 1 # any integer
nqueens = NQueen(n=N, number_lock=lock)
```### Get Number of Queens
To get number of queen:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
number_of_queen = nqueens.get_number_of_queens()
```Output:
```py
print(number_of_queen)
# 4
```### Get Queens Position
To get queen position:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
positions = nqueens.get_queen_positions()
```Output:
```py
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:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
pairs = nqueens.get_attack_pairs()
```Output:
```py
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:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
```output:
```py
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:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show_attack_pairs()
```output
```py
# 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:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_up(queen_pos=1, movement_length=2)
nqueens.show()
```output:
```py
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:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_down(queen_pos=2, movement_length=2)
nqueens.show()
```output:
```py
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:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_to(queen_pos=2, target_pos=1)
nqueens.show()
```output:
```py
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:
```py
N = 4
nqueens = NQueen(n=N, number_lock=1)
nqueens.show()
nqueens.move_random(queen_pos=3)
nqueens.show()
```output:
```py
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.