Skip to main content

CLI to solve combinatoric chess puzzles.

Project description

CLI to solve combinatoric chess puzzles.

Stable release: Last release Python versions Software license Requirements freshness

Development: Unit-tests status Documentation Status Coverage Status Code Quality

Motivation

This project started its life as a coding challenge I was asked to solve while interviewing in 2015 for a software engineering position at Uber.

After the interview proccess ended, I kept toying with the code, as a playground to test some optimization strategies in Python. It is now a boilerplate that I use to:

Install

This package is available on PyPi, so you can install the latest stable release and its dependencies with a simple pip call:

$ pip install chessboard

In case it is not available on your system, see pip installation instructions.

Usage

List global options and commands:

$ chessboard --help
Usage: chessboard [OPTIONS] COMMAND [ARGS]...

  CLI to solve combinatoric chess puzzles.

Options:
  --version      Show the version and exit.
  -v, --verbose  Print much more debug statements.
  --help         Show this message and exit.

Commands:
  benchmark  Benchmark the solver.
  graph      Plot solver performances.
  solve      Solve a chess puzzle.

Solver specific options:

$ chessboard solve --help
Usage: chessboard solve [OPTIONS]

  Solve a puzzle constrained by board dimensions and pieces.

Options:
  -l, --length INTEGER  Length of the board.  [required]
  -h, --height INTEGER  Height of the board.  [required]
  -s, --silent          Do not render result boards in ASCII-art.
  -p, --profile         Produce a profiling graph.
  --queen INTEGER       Number of queens.
  --king INTEGER        Number of kings.
  --rook INTEGER        Number of rooks.
  --bishop INTEGER      Number of bishops.
  --knight INTEGER      Number of knights.
  --help                Show this message and exit.

Benchmark specific options:

$ chessboard benchmark --help
Usage: chessboard benchmark [OPTIONS]

  Run a benchmarking suite and measure time taken by the solver.

  Each scenario is run in an isolated process, and results are appended to
  CSV file.

Options:
  --help  Show this message and exit.

Plotting specific options:

$ chessboard plot --help
Usage: chessboard graph [OPTIONS]

  Update all kind of performance graphs from the benchmark data.

  All data come from CSV database.

Options:
  --help  Show this message and exit.

Examples

Simple 3x3 board with 2 kings and a rook:

$ chessboard solve --length=3 --height=3 --king=2 --rook=1
<SolverContext: length=3, height=3, pieces={'rook': 1, 'king': 2, 'queen': 0, 'bishop': 0, 'knight': 0}>
Searching positions...
┌───┬───┬───┐
        
├───┼───┼───┤
        
├───┼───┼───┤
        
└───┴───┴───┘
┌───┬───┬───┐
        
├───┼───┼───┤
        
├───┼───┼───┤
        
└───┴───┴───┘
┌───┬───┬───┐
       
├───┼───┼───┤
         
├───┼───┼───┤
        
└───┴───┴───┘
┌───┬───┬───┐
        
├───┼───┼───┤
         
├───┼───┼───┤
       
└───┴───┴───┘
4 results found in 0.03 seconds.

Famous eight queens puzzle, without printing the solutions to speed things up:

$ chessboard solve --length=8 --height=8 --queen=8 --silent
<SolverContext: length=8, height=8, pieces={'rook': 0, 'king': 0, 'queen': 8, 'bishop': 0, 'knight': 0}>
Searching positions...
92 results found in 119.87 seconds.

Huge combinatoric problem can take some time to solve:

$ chessboard solve --length=7 --height=7 --king=2 --queen=2 --bishop=2 --knight=1 --silent
<SolverContext: length=7, height=7, pieces={'rook': 0, 'king': 2, 'queen': 2, 'bishop': 2, 'knight': 1}>
Searching positions...
3063828 results found in 9328.33 seconds.

The CLI allow the production of a profiling graph, to identify code hot spots and bottleneck:.

$ chessboard solve --length=6 --height=6 --king=2 --queen=2 --bishop=2 --knight=1 --silent --profile
<SolverContext: length=6, height=6, pieces={'rook': 0, 'king': 2, 'queen': 2, 'bishop': 2, 'knight': 1}>
Searching positions...
23752 results found in 207.25 seconds.
Execution profile saved at /home/kevin/chessboard/solver-profile.png
Solver profiling graph

Performances

Results below are given in seconds, and were run with the --silent option.

Pieces

Size

Solutions

MacBook Air [1]

C1 instance [2]

2 kings, 1 rook

3x3

4

0.01

0.04

2 rooks, 4 knights

4x4

8

0.12

0.91

1 queen

1x1

1

0

0

2 queens

2x2

0

0

0

3 queens

3x3

0

0

0.02

4 queens

4x4

2

0.02

0.10

5 queens

5x5

10

0.10

0.80

6 queens

6x6

4

0.90

7.10

7 queens

7x7

40

8.53

65.55

8 queens

8x8

92

85.80

673.28

9 queens

9x9

352

900.20

7 282.56

2 kings, 2 queens, 2 bishops, 1 knight

5x5

8

3.29

23.79

6x6

23 752

187.40

1 483.31

7x7

3 063 828

8 150.86

62 704.99

To run the standard benchmark suite and add results to the database, run the benchmark in a detached background process:

$ nohup chessboard benchmark > /dev/null 2>&1 &

N-queens problem solving time:

N-queens problem solving time.

Third-party

This project package’s boilerplate is sourced from the code I wrote for Scaleway’s postal-address module, which is published under a GPLv2+ License.

The CLI code is based on the one I wrote for the kdenlive-tools module, published under a BSD license.

Other resources

Changes for v`1.5.2 (2016-11-18) <http://github.com/kdeldycke/chessboard/compare/v1.5.1…v1.5.2>`_

  • Always check for package metadata in Travis CI jobs.

  • Fix package’s long description against PyPi rendering constraints.

  • Add link to full changelog in package’s long description.

Full changelog.

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

chessboard-1.5.2.tar.gz (36.8 kB view details)

Uploaded Source

Built Distributions

chessboard-1.5.2-py2.py3-none-any.whl (31.0 kB view details)

Uploaded Python 2 Python 3

chessboard-1.5.2-py2.7.egg (25.8 kB view details)

Uploaded Source

File details

Details for the file chessboard-1.5.2.tar.gz.

File metadata

  • Download URL: chessboard-1.5.2.tar.gz
  • Upload date:
  • Size: 36.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for chessboard-1.5.2.tar.gz
Algorithm Hash digest
SHA256 268bfb1a4636534a11448f5dc5d177ae13f097f973a1874bdca3e3086130caf4
MD5 3b6ec2444d429f63c2b3603684ea1c85
BLAKE2b-256 8e147bc7e4602dad0d29c5ce8736d6506562dbc867b585bdc51b7c1e9dc1fa74

See more details on using hashes here.

File details

Details for the file chessboard-1.5.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for chessboard-1.5.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e7e4dc33f64ccb56909680d6d75c1466351d0962f95768cf6f8396604133a50e
MD5 4581cb9af3d09e68590954a543146559
BLAKE2b-256 46e790c142f583bc78a68a4502e08f8e79b40abe6f60298f465060819d754c10

See more details on using hashes here.

File details

Details for the file chessboard-1.5.2-py2.7.egg.

File metadata

File hashes

Hashes for chessboard-1.5.2-py2.7.egg
Algorithm Hash digest
SHA256 8e44224ed8e5b04406a1bf73991dfe9c5199508fee4b6d1e7930933323e10ccc
MD5 19d29d3395a3da84ecf53c5925b9ccb8
BLAKE2b-256 f95beefee9192049d2a4b8c94cbff6ef5403ff63acce41486666dd7941caee4d

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