GithubHelp home page GithubHelp logo

rizquuula / nqueenplay Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 47 KB

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.

Home Page: https://pypi.org/project/nquuenplay

License: MIT License

Python 100.00%
algorithm n-queens nqueens puzzle

nqueenplay's Introduction

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.

nqueenplay's People

Contributors

rizquuula avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.