Skip to main content

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.

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nqueenplay-0.0.6.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

nqueenplay-0.0.6-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file nqueenplay-0.0.6.tar.gz.

File metadata

  • Download URL: nqueenplay-0.0.6.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.9

File hashes

Hashes for nqueenplay-0.0.6.tar.gz
Algorithm Hash digest
SHA256 94598fe16f0898202a8c89e19391135f251dd918543e9c1fa6fbe6b9c345ea1a
MD5 db97d2434dd2980a4018390dfddd98df
BLAKE2b-256 6b75ed21c2cb82e7ce13300834a9e8a9fbbdb4c0733e33a6d9447dbc3959fe3a

See more details on using hashes here.

File details

Details for the file nqueenplay-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: nqueenplay-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.9

File hashes

Hashes for nqueenplay-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 61f4b0ebd0b248c76f7065751faa4e74c0b6da50ef830614fd6234de3cfede9c
MD5 a759e5e7379650a57268adc2b10e4c2a
BLAKE2b-256 7f2ba57219ec587c6bcae7f8d7769fdd870af414e216d206c56808dee77e2bb0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page