fork download
  1. algs = ["",
  2. "R' U R' U' R' U' R' U R U R2",
  3. "R U' R U R U R U' R' U' R2",
  4. "R2 U2 R U2 R2 U2 R2 U2 R U2 R2",
  5. "R2 U R2 U' R2 F2 R2 U' F2 U R2 F2",
  6. "R U' R F2 R' U R' U' R2 F2 R2",
  7. "R2 F2 R2 U R U' R F2 R' U R'",
  8. "R U R' U R' U' R F' R U R' U' R' F R2 U' R2 U R",
  9. "F' U2 R' U F U' F' U' R U' F",
  10. "R U R' F' R U R' U' R' F R2 U' R'",
  11. "R' U2 R U2 R' F R U R' U' R' F' R2",
  12. "F' R' U' R F' R' U F' U' F' U F R F2",
  13. "F2 R2 U' R' U' R F2 R' U R F2 U R2 F2",
  14. "F2 R2 U' F2 R' U' R F2 R' U R U R2 F2",
  15. "R' U' R2 U' R2 U' R U2 R2 F U R' U' R F' R",
  16. "R' F R' U R U' F' R2 U2 R' U R2 U R2 U R",
  17. "F' R U R' U' R' F R2 F U' R' U' R U F' R",
  18. "R' U R' F R F' R U' R' F' U F R U R' U' R",
  19. "R U R' U' R' F R2 U' R' U' R U R' F'",
  20. "F R U' R' U' R U R' F' R U R' U' R' F R F'",
  21. "F' U2 F' U' R' F' R2 U' R' U R' F R U' F",
  22. "R U' R U F R F2 U F U' F R' F' R'"]
  23. ##################################################
  24. class MyCube:
  25. """A virtual 3x3x3 matrix"""
  26. def __init__(self):
  27. self.uSide = ['U', 'U', 'U', 'U', 'U', 'U', 'U', 'U'] #URF, UF, etc
  28. self.fSide = ['F', 'F', 'F', 'F', 'F', 'F', 'F', 'F'] #FRD, FD, etc
  29. self.lSide = ['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'] #LFD, LD, etc
  30. self.bSide = ['B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'] #BRD, BD, etc
  31. self.rSide = ['R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'] #RBD, RD, etc
  32. self.dSide = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D'] #DBR, DR, etc
  33.  
  34.  
  35. def doU(self):
  36.  
  37. self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5], self.uSide[6], self.uSide[7] = self.uSide[6], self.uSide[7], self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5]
  38.  
  39. self.fSide[5], self.lSide[5], self.bSide[1], self.rSide[5] = self.rSide[5], self.fSide[5], self.lSide[5], self.bSide[1]
  40. self.fSide[6], self.lSide[6], self.bSide[2], self.rSide[6] = self.rSide[6], self.fSide[6], self.lSide[6], self.bSide[2]
  41. self.fSide[7], self.lSide[7], self.bSide[3], self.rSide[7] = self.rSide[7], self.fSide[7], self.lSide[7], self.bSide[3]
  42.  
  43. def doUp(self):
  44. self.uSide[6], self.uSide[7], self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5] = self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5], self.uSide[6], self.uSide[7]
  45.  
  46. self.rSide[5], self.fSide[5], self.lSide[5], self.bSide[1] = self.fSide[5], self.lSide[5], self.bSide[1], self.rSide[5]
  47. self.rSide[6], self.fSide[6], self.lSide[6], self.bSide[2] = self.fSide[6], self.lSide[6], self.bSide[2], self.rSide[6]
  48. self.rSide[7], self.fSide[7], self.lSide[7], self.bSide[3] = self.fSide[7], self.lSide[7], self.bSide[3], self.rSide[7]
  49.  
  50. def doR(self):
  51.  
  52. self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5], self.rSide[6], self.rSide[7] = self.rSide[6], self.rSide[7], self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5]
  53.  
  54. self.fSide[7], self.uSide[7], self.bSide[7], self.dSide[7] = self.dSide[7], self.fSide[7], self.uSide[7], self.bSide[7]
  55. self.fSide[0], self.uSide[0], self.bSide[0], self.dSide[0] = self.dSide[0], self.fSide[0], self.uSide[0], self.bSide[0]
  56. self.fSide[1], self.uSide[1], self.bSide[1], self.dSide[1] = self.dSide[1], self.fSide[1], self.uSide[1], self.bSide[1]
  57.  
  58. def doRp(self):
  59. self.rSide[6], self.rSide[7], self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5] = self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5], self.rSide[6], self.rSide[7]
  60.  
  61. self.dSide[7], self.fSide[7], self.uSide[7], self.bSide[7] = self.fSide[7], self.uSide[7], self.bSide[7], self.dSide[7]
  62. self.dSide[0], self.fSide[0], self.uSide[0], self.bSide[0] = self.fSide[0], self.uSide[0], self.bSide[0], self.dSide[0]
  63. self.dSide[1], self.fSide[1], self.uSide[1], self.bSide[1] = self.fSide[1], self.uSide[1], self.bSide[1], self.dSide[1]
  64.  
  65. def doF(self):
  66. self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5], self.fSide[6], self.fSide[7] = self.fSide[6], self.fSide[7], self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5]
  67.  
  68. self.uSide[1], self.rSide[3], self.dSide[5], self.lSide[7] = self.lSide[7], self.uSide[1], self.rSide[3], self.dSide[5]
  69. self.uSide[2], self.rSide[4], self.dSide[6], self.lSide[0] = self.lSide[0], self.uSide[2], self.rSide[4], self.dSide[6]
  70. self.uSide[3], self.rSide[5], self.dSide[7], self.lSide[1] = self.lSide[1], self.uSide[3], self.rSide[5], self.dSide[7]
  71.  
  72. def doFp(self):
  73. self.fSide[6], self.fSide[7], self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5] = self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5], self.fSide[6], self.fSide[7]
  74.  
  75. self.lSide[7], self.uSide[1], self.rSide[3], self.dSide[5] = self.uSide[1], self.rSide[3], self.dSide[5], self.lSide[7]
  76. self.lSide[0], self.uSide[2], self.rSide[4], self.dSide[6] = self.uSide[2], self.rSide[4], self.dSide[6], self.lSide[0]
  77. self.lSide[1], self.uSide[3], self.rSide[5], self.dSide[7] = self.uSide[3], self.rSide[5], self.dSide[7], self.lSide[1]
  78.  
  79.  
  80.  
  81. def doAlg(self, algString):
  82. ialg = algString.replace('(', '') #get rid of unwanted
  83. ialg = ialg.replace(')', '') # or otherwise unneeded characters
  84. ialg = ialg.replace("2'", '2') # incl. whitespace, paren., 2's
  85. ialg = ialg.replace(' ', ' ')
  86. parts = ialg.split(' ') #Divide the alg up into individual moves
  87.  
  88. for part in parts:
  89. if part == 'U': self.doU()
  90. elif part == 'U2': self.doU(); self.doU()
  91. elif part == "U'": self.doUp()
  92.  
  93. elif part == 'F': self.doF()
  94. elif part == 'F2': self.doF(); self.doF()
  95. elif part == "F'": self.doFp()
  96.  
  97. elif part == 'R': self.doR()
  98. elif part == 'R2': self.doR(); self.doR()
  99. elif part == "R'": self.doRp()
  100.  
  101. def printCube(self):
  102. print
  103. print " ", self.bSide[5] + self.bSide[6] + self.bSide[7]
  104. print " ", self.bSide[4] + "b" + self.bSide[0]
  105. print " ", self.bSide[3] + self.bSide[2] + self.bSide[1] + '\n'
  106.  
  107. print " ", self.uSide[5] + self.uSide[6] + self.uSide[7]
  108. print " ", self.uSide[4] + "u" + self.uSide[0]
  109. print " ", self.uSide[3] + self.uSide[2] + self.uSide[1] + '\n'
  110.  
  111. print "" + self.lSide[5] + self.lSide[6] + self.lSide[7], self.fSide[5] + self.fSide[6] + self.fSide[7], self.rSide[5] + self.rSide[6] + self.rSide[7]
  112. print "" + self.lSide[4] + 'l' + self.lSide[0], self.fSide[4] + 'f' + self.fSide[0], self.rSide[4] + 'r' + self.rSide[0]
  113. print "" + self.lSide[3] + self.lSide[2] + self.lSide[1], self.fSide[3] + self.fSide[2] + self.fSide[1], self.rSide[3] + self.rSide[2] + self.rSide[1] + '\n'
  114.  
  115. print " ", self.dSide[5] + self.dSide[6] + self.dSide[7]
  116. print " ", self.dSide[4] + "d" + self.dSide[0]
  117. print " ", self.dSide[3] + self.dSide[2] + self.dSide[1] + '\n'
  118.  
  119. def checkSolved(self):
  120. if self.uSide[0] == self.uSide[1] == self.uSide[2] == self.uSide[3] == self.uSide[4] == self.uSide[5] == self.uSide[6] == self.uSide[7]:
  121. if self.fSide[5] == self.fSide[6] == self.fSide[7]:
  122. if self.lSide[5] == self.lSide[6] == self.lSide[7]:
  123. if self.rSide[5] == self.rSide[6] == self.rSide[7]:
  124. if self.bSide[3] == self.bSide[2] == self.bSide[1]:
  125. return True
  126. return False
  127.  
  128. ##################################################
  129. def tryOne(xTemp, this): #string of alg trying, string of alg trying to solve
  130.  
  131. for bap in range(4):
  132. wtf = MyCube(); wtf.doAlg(this)
  133.  
  134. for pab in range(bap):
  135. wtf.doU()
  136.  
  137. wtf.doAlg(algs[xTemp])
  138.  
  139. if wtf.checkSolved(): return True
  140.  
  141. return False
  142.  
  143.  
  144.  
  145. def tryTwo(aTemp, bTemp, this):
  146.  
  147. for bap in range(4):
  148. wtf2 = MyCube(); wtf2.doAlg(this)
  149.  
  150. for pab in range(bap):
  151. wtf2.doU()
  152.  
  153. wtf2.doAlg(algs[aTemp])
  154.  
  155. for bap2 in range(4):
  156.  
  157. for pab in range(bap):
  158. wtf2.doU()
  159.  
  160. wtf2.doAlg(algs[bTemp])
  161.  
  162.  
  163. if wtf2.checkSolved(): return True
  164.  
  165. return False
  166.  
  167.  
  168.  
  169. def checkCombo(x, y):
  170. count = 0
  171. for alg in algs:
  172.  
  173. aCube = MyCube(); aCube.doAlg(alg)
  174. # if aCube.checkSolved(): #basically, check if it's already good (case algs[0])
  175. # count +=1; print 'try000', alg; continue
  176.  
  177. # if tryOne(x, alg): count += 1; print 'try1 x', alg; continue
  178. # if tryOne(y, alg): count += 1; print 'try1 y', alg; continue
  179.  
  180. # if tryTwo(x, y, alg): count += 1; print 'try2xy', alg; continue
  181. # if tryTwo(y, x, alg): count += 1; print 'try2yx', alg; continue
  182. #
  183. # if tryTwo(x, x, alg): count += 1; print 'try2xx', alg; continue
  184. # if tryTwo(y, y, alg): count += 1; print 'try2yy', alg; continue
  185. if aCube.checkSolved(): #basically, check if it's already good (case algs[0])
  186. count +=1; print 'try000', alg; continue
  187.  
  188. if tryOne(x, alg): count += 1; continue
  189. if tryOne(y, alg): count += 1; continue
  190.  
  191. if tryTwo(x, y, alg): count += 1; continue
  192. if tryTwo(y, x, alg): count += 1; continue
  193.  
  194. if tryTwo(x, x, alg): count += 1; continue
  195. if tryTwo(y, y, alg): count += 1; continue
  196.  
  197. print count,
  198. if count == 22: return True
  199. else: return False
  200.  
  201.  
  202.  
  203.  
  204.  
  205. TEMP = 8# len(algs)
  206. for a1 in range(TEMP):
  207. for a2 in range(a1+1):
  208. print a1, a2, '\t'
  209. if checkCombo(a1, a2): print "" + algs[a1] + '\t' + algs[a2] + "work!!!"
  210. print; print
  211.  
Success #stdin #stdout 9.6s 6360KB
stdin
Standard input is empty
stdout
0 0 	
try000 
1

1 0 	
try000 
5

1 1 	
try000 
4

2 0 	
try000 
5

2 1 	
try000 
5

2 2 	
try000 
5

3 0 	
try000 
2

3 1 	
try000 
4

3 2 	
try000 
5

3 3 	
try000 
2

4 0 	
try000 
3

4 1 	
try000 
5

4 2 	
try000 
5

4 3 	
try000 
3

4 4 	
try000 
3

5 0 	
try000 
4

5 1 	
try000 
12

5 2 	
try000 
10

5 3 	
try000 
5

5 4 	
try000 
8

5 5 	
try000 
4

6 0 	
try000 
4

6 1 	
try000 
12

6 2 	
try000 
11

6 3 	
try000 
5

6 4 	
try000 
8

6 5 	
try000 
5

6 6 	
try000 
4

7 0 	
try000 
3

7 1 	
try000 
8

7 2 	
try000 
8

7 3 	
try000 
3

7 4 	
try000 
5

7 5 	
try000 
5

7 6 	
try000 
5

7 7 	
try000 
3