Skip to main content

Python/C implementation of Herbert Kociemba's Two-Phase algorithm for solving Rubik's Cube

Project description

[![Build Status](https://travis-ci.org/muodov/kociemba.svg?branch=master)](https://travis-ci.org/muodov/kociemba)

# kociemba
This Python package contains two equivalent implementations (in C and Python) of Herbert Kociemba's two-phase algorithm for solving Rubik's Cube.
Original Java implementation can be found here: http://kociemba.org/download.htm.

These ports are pretty straightforward (not to say dumb) and most probably can be optimized. But they have been extensively tested in our Rubik's cube solving machines ([FAC System Solver](https://blog.zok.pw/hacking/2015/08/18/fac-rubik-solver/) and [Meccano Rubik's Shrine](http://blog.zok.pw/hacking/2016/08/12/meccano-rubiks-shrine/)), so be confident the algorithm is working.

## Installation
This package is published on PyPI and can be installed with:

```$ pip install kociemba```

It was tested under Python 2.7 and 3.3+.

### Unix-based systems

You might need to install libffi system library beforehand. For example, on Debian-based distributions (e.g. Raspbian) you would run `sudo apt-get install libffi-dev`.

### Windows

Library should work on Windows, however it is not automatically tested at this moment: Travis CI [doesn't have windows support](https://github.com/travis-ci/travis-ci/issues/2104).

Normal `pip install kociemba` (or `pip3 install kociemba` for Python 3.3+) should work, but you will need to install free build tools from Microsoft first. Check the following links:

- for Python 2.7: https://www.microsoft.com/en-us/download/details.aspx?id=44266
- for Python 3: https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017

## Usage

The package exposes just one function ```solve()```, which accepts a cube definition string and returns a solution string in standard notation (see below).
Optional second argument allows solving to a specific pattern.

```python
>>> import kociemba

>>> kociemba.solve('DRLUUBFBRBLURRLRUBLRDDFDLFUFUFFDBRDUBRUFLLFDDBFLUBLRBD')
u"D2 R' D' F2 B D R2 D2 R' F2 D' F2 U' B2 L2 U2 D R2 U"

>>> kociemba.solve('FLBUULFFLFDURRDBUBUUDDFFBRDDBLRDRFLLRLRULFUDRRBDBBBUFL', 'BBURUDBFUFFFRRFUUFLULUFUDLRRDBBDBDBLUDDFLLRRBRLLLBRDDF')
u"R' D2 R' U2 R F2 D B2 U' R F' U R2 D L2 D' B2 R2 B2 U' B2"
```

## Standalone tool
When installing with pip, `kociemba` will also register a command line tool with the same name. So you can also use it like this:

```$ kociemba <cubestring>```

## Cube string notation
The names of the facelet positions of the cube (letters stand for Up, Left, Front, Right, Back, and Down):
```
|************|
|*U1**U2**U3*|
|************|
|*U4**U5**U6*|
|************|
|*U7**U8**U9*|
|************|
************|************|************|************
*L1**L2**L3*|*F1**F2**F3*|*R1**R2**R3*|*B1**B2**B3*
************|************|************|************
*L4**L5**L6*|*F4**F5**F6*|*R4**R5**R6*|*B4**B5**B6*
************|************|************|************
*L7**L8**L9*|*F7**F8**F9*|*R7**R8**R9*|*B7**B8**B9*
************|************|************|************
|************|
|*D1**D2**D3*|
|************|
|*D4**D5**D6*|
|************|
|*D7**D8**D9*|
|************|
```

A cube definition string "UBL..." means that in position U1 we have the U-color, in position U2 we have the
B-color, in position U3 we have the L color etc. according to the order U1, U2, U3, U4, U5, U6, U7, U8, U9, R1, R2,
R3, R4, R5, R6, R7, R8, R9, F1, F2, F3, F4, F5, F6, F7, F8, F9, D1, D2, D3, D4, D5, D6, D7, D8, D9, L1, L2, L3, L4,
L5, L6, L7, L8, L9, B1, B2, B3, B4, B5, B6, B7, B8, B9.

So, for example, a definition of a solved cube would be `UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB`

Solution string consists of space-separated parts, each of them represents a single move:
* A single letter by itself means to turn that face clockwise 90 degrees.
* A letter followed by an apostrophe means to turn that face counterclockwise 90 degrees.
* A letter with the number 2 after it means to turn that face 180 degrees.

e.g. **R U R’ U R U2 R’ U**

## C version
C sources reside in the `ckociemba` folder. Running `make` inside this directory will compile a standalone binary. It accepts a cube representation as a command line argument, and writes the solution to the standard output. You can, of course, use `ckociemba` sources directly in your projects.

## Performance
When possible, `kociemba` will use C implementation under the hood. If something goes wrong (C version cannot be imported) it will automatically fall back to pure-Python implementation. However, it will be much slower.


## Testing
To run the tests, clone the repository and run:

```$ python setup.py test```

## Thanks to

- @jarheadjoe for his contribution to Windows support


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

kociemba-1.2.tar.gz (6.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

kociemba-1.2-cp36-cp36m-win32.whl (6.8 MB view details)

Uploaded CPython 3.6mWindows x86

kociemba-1.2-cp36-cp36m-macosx_10_13_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.6mmacOS 10.13+ x86-64

kociemba-1.2-cp27-cp27m-win32.whl (6.8 MB view details)

Uploaded CPython 2.7mWindows x86

kociemba-1.2-cp27-cp27m-macosx_10_13_x86_64.whl (6.8 MB view details)

Uploaded CPython 2.7mmacOS 10.13+ x86-64

File details

Details for the file kociemba-1.2.tar.gz.

File metadata

  • Download URL: kociemba-1.2.tar.gz
  • Upload date:
  • Size: 6.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for kociemba-1.2.tar.gz
Algorithm Hash digest
SHA256 52115ba37737b14ba1574725ecb75ff2053eeef5de1e6e64806e33504c266006
MD5 f2e5a057e7732e14c9781b1673cf14eb
BLAKE2b-256 8f578a25250dd75fd7db838bea71428570a955197644ce680c32c6ecb24a130b

See more details on using hashes here.

File details

Details for the file kociemba-1.2-cp36-cp36m-win32.whl.

File metadata

File hashes

Hashes for kociemba-1.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 a79f01e24b0edb1798f8dc342bf68ca77f45c4ef8fc22118d6a11aa57dde284c
MD5 af1928380894cae4459cc30505a240f6
BLAKE2b-256 2fdaa48ca779bfe4682f31e86271c594b66d3f347e6aab58bbda5e6ceb8fbfb8

See more details on using hashes here.

File details

Details for the file kociemba-1.2-cp36-cp36m-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for kociemba-1.2-cp36-cp36m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 bfad73cdc1d3ef4578bce0e0a40559610d2d0a873d5d08a13255eec9346890b5
MD5 03ada0044cbd33ec1b0f8672884ce7d0
BLAKE2b-256 441f435d52fa21d6e9fd6375d0bdec70fa5896deebb859cb4fbd4c39c1331288

See more details on using hashes here.

File details

Details for the file kociemba-1.2-cp27-cp27m-win32.whl.

File metadata

File hashes

Hashes for kociemba-1.2-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 9445e2af0a6adcfbe9128b441993988c5be6e9922d4f816d29495895281f0900
MD5 b741a9deabb0515c0ced088e6522209a
BLAKE2b-256 0082c001494ef1aca9a97cbd1ed801b7f5c76cd0e43eea8db13c8779680f3290

See more details on using hashes here.

File details

Details for the file kociemba-1.2-cp27-cp27m-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for kociemba-1.2-cp27-cp27m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6da489c2dd1043b2d4aa17f2be1623c432fbcc033ba1d4c3a02ff015e9b20531
MD5 5838890dc0718752f223b4bde1e7ae64
BLAKE2b-256 2122f869e85780967f70415acca49afab1ad754896ac50e6742a049cb6275a1b

See more details on using hashes here.

Supported by

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