Skip to main content

A Python utility package for generating scrambles for twisty puzzles without non-python dependency

Project description

cubescrambler

A Python package for generating scrambles of various twisty puzzles, including the Rubik's cube, 4x4x4 cube, and others, based on pyTwistyScrambler. Thanks to csTimer for providing the bulk of the Javascript scrambling source code around which this project is a wrapper. And thanks for pyTwistyScrambler for the base code this wrapper is built on.

Reason

pyTwistyScrambler is using PyExecJS for executing the JavaScript but it's EOL and it needs nodejs or any other js runtime on the system. My version uses dukpy which doesn't have any external dependencies and is actively maintained. There are no other changes besides removing FTO and rex puzzles because I didn't need them.

Example usage

from cubescrambler import scrambler333, scrambler222, scrambler444,\
	megaminxScrambler, squareOneScrambler

scrambler333.get_WCA_scramble()
# D2 L F2 L2 F2 U2 L D2 F2 L' B' U2 F2 D' F D2 B' U2 R U'

scrambler222.get_WCA_scramble()
# R' F2 U2 R' U R2 F' U' F' U'

scrambler444.get_WCA_scramble()
# L2 F D2 R U Fw' Uw D L F Rw D' F L2 F' Rw' F Uw B' F' L2 B' U' Rw' F B R' D U2 L2 Fw' B D' Rw' Uw' B' Fw' R2 L2 U

megaminxScrambler.get_WCA_scramble()
# R-- D-- R++ D++ R++ D++ R++ D++ R++ D++ U R-- D++ R-- D++ R-- D++ R-- D++ R-- D-- U' R-- D++ R-- D-- R-- D++ R-- D-- R-- D-- U' R++ D++ R-- D-- R++ D-- R-- D++ R-- D-- U' R-- D-- R++ D++ R++ D-- R++ D++ R++ D-- U' R-- D-- R++ D-- R++ D-- R++ D-- R++ D++ U R++ D-- R++ D-- R++ D++ R-- D-- R++ D++ U

squareOneScrambler.get_WCA_scramble()
# (0, -1)/(4, 1)/(-4, 5)/(0, -3)/(1, -2)/(3, 0)/(2, 0)/(0, -3)/(4, -3)/(0, -4)/(2, 0)/(5, -2)/(4, 0)

What scrambles can be generated?

3x3x3 (Rubik's cube)

In scrambler333 module:

  • get_WCA_scramble() random state scramble (WCA)
  • get_3BLD_scramble() BLD scramble
  • get_edges_scramble() edges-only
  • get_corners_scramble() corners-only
  • get_LL_scramble() LL (last layer)
  • get_F2L_scramble() F2L (first two layers)
  • get_easy_cross_scramble(n=4) easy cross (where cross can be solved in n moves)
  • get_LSLL_scramble() LSLL
  • get_ZBLL_scramble() ZBLL
  • get_ZZLL_scramble() ZZLL
  • get_ZBLS_scramble() ZBLS
  • get_LSE_scramble() LSE
  • get_CMLL_scramble() CMLL
  • get_CLL_scramble() CLL
  • get_ELL_scramble() ELL
  • get_EOLine_scramble() EO Line
  • get_2genRU_scramble() 2-gen with RU moves
  • get_2genLU_scramble() 2-gen with LU moves
  • get_2genMU_scramble() 2-gen with MU moves
  • get_3genFRU_scramble() 3-gen with FRU moves
  • get_3genRUL_scramble() 3-gen with RUL moves
  • get_3genRrU_scramble() 3-gen with RrU moves
  • get_half_turns_scramble() half-turns only

2x2x2

In scrambler222 module:

  • get_WCA_scramble() random scramble (WCA)
  • get_optimal_scramble() optimal random state scramble

4x4x4

In scrambler444 module:

  • get_WCA_scramble() random scramble (WCA) (note: this is slow)
  • get_4BLD_scramble(n=40) alias of get_random_state_scramble(n=40)
  • get_SiGN_scramble(n=40) SiGN-notation scramble of length n
  • get_random_state_scramble(n=40) random state scramble of length n
  • get_edges_scramble(n=8) edges scramble

5x5x5

In scrambler555 module:

  • get_WCA_scramble(n=60) random scramble (WCA) of length n
  • get_5BLD_scramble(n=60) alias of get_WCA_scramble
  • get_SiGN_scramble(n=60) SiGN-notation scramble of length n
  • get_edges_scramble(n=8) edges scramble

6x6x6

In scrambler666 module:

  • get_WCA_scramble(n=80) random scramble (WCA) of length n
  • get_SiGN_scramble(n=80) SiGN-notation scramble of length n
  • get_edges_scramble(n=8) edges scramble

7x7x7

In scrambler777 module:

  • get_WCA_scramble(n=100) random scramble (WCA) of length n
  • get_SiGN_scramble(n=100) SiGN-notation scramble of length n
  • get_edges_scramble(n=8) edges scramble

Pyraminx

In pyraminxScrambler module:

  • get_WCA_scramble() random scramble (WCA)
  • get_optimal_scramble() optimal random state scramble

Megaminx

In megaminxScrambler module:

  • get_WCA_scramble(n=70) random scramble (WCA) of length n
  • get_Carrot_scramble(n=70) Carrot-notation scramble of length n
  • get_old_style_scramble(n=70) old-style scramble of length n

Square-1

In squareOneScrambler module:

  • get_WCA_scramble() random scramble (WCA)
  • get_face_turn_metric_scramble(n=40) face-turn metric scramble of length n
  • get_twist_metric_scramble(n=20) twist metric scramble of length n

Skewb

In skewbScrambler module:

  • get_WCA_scramble() random scramble (WCA)
  • get_ULRB_scramble() ULRB scramble

Clock

In clockScrambler module:

  • get_WCA_scramble() Clock scramble (WCA notation)
  • get_Jaap_scramble() Clock scramble (Jaap notation)
  • get_concise_scramble() Clock scramble (concise notation)
  • get_efficient_pin_order_scramble() Clock scramble (efficient pin order notation)

Big cubes

In bigCubesScrambler module:

  • get_8x8x8_scrambler(n=120) 8x8x8 scramble (SiGN notation) of length n
  • get_9x9x9_scrambler(n=120) 9x9x9 scramble (SiGN notation) of length n
  • get_10x10x10_scrambler(n=120) 10x10x10 scramble (SiGN notation) of length n
  • get_11x11x11_scrambler(n=120) 11x11x11 scramble (SiGN notation) of length n

Cuboids

In cuboidsScrambler module:

  • get_1x1x2_scramble() 1x1x2 cuboid scramble
  • get_1x3x3_scramble() 1x3x3 cuboid (floppy cube) scramble
  • get_floppy_cube_scramble() alias of get_1x3x3_scramble()
  • get_super_floppy_cube_scramble() 1x3x3 cuboid (super floppy cube) scramble
  • get_2x2x3_scramble() 2x2x3 cuboid scramble
  • get_3x3x2_scramble() 3x3x2 cuboid scramble
  • get_3x3x4_scramble() 3x3x4 cuboid scramble
  • get_3x3x5_scramble(n=25) 3x3x5 cuboid scramble, where n is the length of the non-3x3 portion of the scramble
  • get_3x3x6_scramble() 3x3x6 cuboid scramble
  • get_3x3x7_scramble(n=40) 3x3x7 cuboid scramble, where n is the length of the non-3x3 portion of the scramble

Copyright Notice

This software includes third party open source software components: pyTwistyScrambler from euphwes and csTimer from cs0x7f. Each of these software components have their own license. Please see ./LICENSE, and ./cubescrambler/js_resources/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

cubescrambler-1.0.0.tar.gz (55.4 kB view details)

Uploaded Source

Built Distribution

cubescrambler-1.0.0-py3-none-any.whl (61.1 kB view details)

Uploaded Python 3

File details

Details for the file cubescrambler-1.0.0.tar.gz.

File metadata

  • Download URL: cubescrambler-1.0.0.tar.gz
  • Upload date:
  • Size: 55.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for cubescrambler-1.0.0.tar.gz
Algorithm Hash digest
SHA256 54bf0ce3f9b86af58b25857a32ed2ad3096cae2d18340b9ad2c4e4abfb82c8b7
MD5 dcb63c3d6f9dcf1f422a20751635b950
BLAKE2b-256 9db0e1cd23a1f14270cb57a56b16a35b761994391e96b822dacb5266895b9859

See more details on using hashes here.

File details

Details for the file cubescrambler-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cubescrambler-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d7a73884eb9695f5871e423d0880dd74364193fe9ae1de8343e61a0d12148160
MD5 b6c645c7ee9fdb9ff4646b177084e20e
BLAKE2b-256 287f9c8d4c8dce06e052ae4f384bc66581c176d9fcad4d7846b02867911c4a6b

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