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.


Keywords
n-queens, nqueens, puzzle, algorithm
License
MIT
Install
pip install nqueenplay==0.0.1

Documentation

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.

GitHub GitHub repo size GitHub contributors

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.