Skip to content

Commit

Permalink
Add ability to solve() to a given pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
ansiwen committed Dec 29, 2015
1 parent c254cb4 commit 88d1c03
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
11 changes: 10 additions & 1 deletion kociemba/__init__.py
Expand Up @@ -44,14 +44,23 @@ def _solve(s):
return res


def solve(cubestring):
def solve(cubestring, patternstring=None):
"""
Solve a Rubik's cube using two-phase algorithm.
>>> solve("BBURUDBFUFFFRRFUUFLULUFUDLRRDBBDBDBLUDDFLLRRBRLLLBRDDF")
"B U' L' D' R' D' L2 D' L F' L' D F2 R2 U R2 B2 U2 L2 F2 D'"
"""

if patternstring is not None:
from .pykociemba.cubiecube import CubieCube
from .pykociemba.facecube import FaceCube
cc = FaceCube(cubestring).toCubieCube()
pattern = CubieCube()
FaceCube(patternstring).toCubieCube().invCubieCube(pattern)
pattern.multiply(cc)
cubestring = pattern.toFaceCube().to_String()

return _solve(cubestring)

__all__ = ['solve']
43 changes: 43 additions & 0 deletions tests/test_solve.py
Expand Up @@ -307,6 +307,49 @@
def test_solve_function(input, expected):
assert solve(input) == expected

@pytest.mark.parametrize("input,pattern,expected", [
("UUFDUBFDUBRUFRULRDDBRRFDUUBRLDBDDDLBLLLFLFRLFLBBRBURFF",
"FBULUBBULFRFFRDBRBRLDLFDFUDLFLFDDRULRBUULFDRURDDLBRUBB",
"U' L2 F' B2 U2 D' B2 R U B' U2 R' D' B2 R2 U' F2 R2 U' D2 F2"),
("UUFLUFBULDLRURUUFBUBBFFLDBRFDBLDRDRRFDLBLDFBRURLFBRDDL",
"RRRUUFRLBLDFRRDULLUBDBFUULLRUFFDFLLDBFBRLUURFDDDBBBFDB",
"B2 D' F2 D2 B' D' R2 F D' R F2 R2 D2 R2 U B2 U2 R2 F2"),
("DLLLUULDRBFUFRRFFLFBDRFRUBRBUUDDLBLFFDDRLDDFRBBRBBUUUL",
"UULRUFDFBRDFFRDFBDFRURFUUFLLLDDDLDDBRURBLBLRBULFLBURBB",
"U2 F B L' U' B2 D F' B2 U2 D2 R' U2 R2 U R2 D' B2 U2 R2 B2 L2"),
("FBURUFDDLFDBLRLUBBFLDRFFRBFBLRFDUBRDLDRFLBURDLDUUBULUR",
"LFBRUULLLUFRDRDUDFDDFRFRUBFLRRLDBUBDFFBBLURUBDLDFBURLB",
"L' U' D2 B2 L D' B R L' B U2 D2 R2 F2 B2 U' B2 U2 L2 F2"),
("LRDBURRFDFBFBRUBLBUDRRFLLLRUFDFDURRLDDBDLDUUFLUBBBLUFF",
"LDLLUBFRUBDBLRFLBRUBRDFDRBDDUFRDLLUDUFRULFUFFDRFUBRBLB",
"U D2 B D' R' U' F' D' F' L2 F' U2 F2 D L2 U R2 U' L2 U'"),
("BBLFUFFRRBDFDRLUBURBDUFRUDBRLLRDUDBRLRDLLFFUFULDUBFBDL",
"ULLFUUDURDRBLRDUBDLBFFFDLLRBUBRDRUBBFRFLLUFDUDFLFBBRDR",
"R' D2 B' R F D2 F2 D F R' L2 F2 U' R2 D F2 U D R2 D'"),
("DRLLUUURBRBFBRUDLULBUFFDLDFDFLRDDDLFFBBRLUBFBUURLBDRFR",
"LFFFUBDLDRLUBRRLDBFUBDFDRRBFBDFDRBUUFRRDLFLLULUDUBLRBU",
"U' F R2 U B2 L' B2 U2 B R F U R2 B2 U D F2 U' B2 D'"),
("DDULUULFDFRRBRURDDDURFFDUBULRFUDFLFBLBBDLRFBBBLFLBRRLU",
"FRLLULDFLFFUDRBRRRFDDUFRDBDBLBBDFUBULURDLFRDLBUUUBLFRB",
"F L D R B U2 L B' L2 D2 R' D' B2 D F2 B2 D L2 D B2 R2"),
("DBBUUBUDBRRDRRDLUFLFUDFFRUFBLUFDRFBDLFBBLRRLDLUFLBLRDU",
"RBRFULBBLUUUDRDBRRLUFBFLRLLDFUUDUDFDUDDRLLFFFFDBRBBBRL",
"R' F' R B2 R D B L D2 L F' U' L2 D2 F2 U' B2 R2 F2 L2 D'"),
("DRFFUBLBFDRDBRULRRUDLLFURRBFFDFDDLDBRUFDLBULURUBLBLUFB",
"DLUDUFUFRURFBRULLLLDBUFDDUFFRULDUDBDRRBBLFLFRRDBBBLFRB",
"U2 R U2 R B' L' D B D F L' U B2 D2 R2 D2 R2 D L2 U B2")
])
def test_solve_pattern_function(input, pattern, expected):
assert solve(input, pattern) == expected

if __name__ == '__main__':
import sys
Expand Down

0 comments on commit 88d1c03

Please sign in to comment.