StachuK1992
statue
I've been working on a cube implementation for a few weeks now in order to oversee a much larger project.
At this point, the larger project is 'complete', but would take...let's say weeks to run.
Right now, it performs algs move by move, obviously taking up a lot of time.
Let me just show you what I can without revealing what the larger project is.
Right now I have two files that I frequently switch between.
The first of these writes a function of what an alg should do to a cube, so that later on, I can call a pre-written function rather than call each move (doU, doFp, etc) separately. This should reduce my runtime significantly.
The file that writes, with the part I think is wrong in bold:
As is, this function outputs
-a .txt file that /should/ contain the equivalent of the sticker movement of each alg, by reference
-a matrix in real-time of what the cube should look like.
Right now, I'm certain that the output matrix is fine, which assures me that my doU, etc functions are correct as is.
However, the implementation of the def crazyAlg(etc): in the next file is obviously faulty. Yeah, it's long; I know.
The above code works correctly if you comment the doCrazy and uncomment the doAlg, therefore then again the regular doAlg function is working. I'm 95% certain there's nothing wrong with this, as I've implemented these functions a number of times in the larger project.
As for doCrazy, it often gives me 5 F stickers on the U face, or something crazy like that. I don't like that. In fact, U2 is giving me :
FFF
L UUU L
L UuU L
L UUU L
FFF
My question: Where in my writing of doCrazy did I go wrong?
This would be very highly appreciated, as I've been stressing over this for well over a week now.
Thanks,
Stachu Korick
At this point, the larger project is 'complete', but would take...let's say weeks to run.
Right now, it performs algs move by move, obviously taking up a lot of time.
Let me just show you what I can without revealing what the larger project is.
Right now I have two files that I frequently switch between.
The first of these writes a function of what an alg should do to a cube, so that later on, I can call a pre-written function rather than call each move (doU, doFp, etc) separately. This should reduce my runtime significantly.
The file that writes, with the part I think is wrong in bold:
Code:
algs = ["",
"R' U R' U' R' U' R' U R U R2",
"R U' R U R U R U' R' U' R2",
"R2 U2 R U2 R2 U2 R2 U2 R U2 R2",
"R2 U R2 U' R2 F2 R2 U' F2 U R2 F2",
"R U' R F2 R' U R' U' R2 F2 R2",
"R2 F2 R2 U R U' R F2 R' U R'",
"R U R' U R' U' R F' R U R' U' R' F R2 U' R2 U R",
"F' U2 R' U F U' F' U' R U' F",
"R U R' F' R U R' U' R' F R2 U' R'",
"R' U2 R U2 R' F R U R' U' R' F' R2",
"F' R' U' R F' R' U F' U' F' U F R F2",
"F2 R2 U' R' U' R F2 R' U R F2 U R2 F2",
"F2 R2 U' F2 R' U' R F2 R' U R U R2 F2",
"R' U' R2 U' R2 U' R U2 R2 F U R' U' R F' R",
"R' F R' U R U' F' R2 U2 R' U R2 U R2 U R",
"F' R U R' U' R' F R2 F U' R' U' R U F' R'",
"R' U R' F R F' R U' R' F' U F R U R' U' R",
"R U R' U' R' F R2 U' R' U' R U R' F'",
"F R U' R' U' R U R' F' R U R' U' R' F R F'",
"F' U2 F' U' R' F' R2 U' R' U R' F R U' F",
"R U' R U F R F2 U F U' F R' F' R'",
"U2"]
##################################################
class MyCube:
"""A virtual 3x3x3 matrix"""
def __init__(self):
self.uSide = ['U0', 'U1', 'U2', 'U3', 'U4', 'U5', 'U6', 'U7'] #URF, UF, etc
self.fSide = ['F0', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7'] #FRD, FD, etc
self.lSide = ['L0', 'L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7'] #LFD, LD, etc
self.bSide = ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7'] #BRD, BD, etc
self.rSide = ['R0', 'R1', 'R2', 'R3', 'R4', 'R5', 'R6', 'R7'] #RBD, RD, etc
self.dSide = ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7'] #DBR, DR, etc
def doU(self):
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]
self.fSide[5], self.lSide[5], self.bSide[5], self.rSide[5] = self.rSide[5], self.fSide[5], self.lSide[5], self.bSide[5]
self.fSide[6], self.lSide[6], self.bSide[6], self.rSide[6] = self.rSide[6], self.fSide[6], self.lSide[6], self.bSide[6]
self.fSide[7], self.lSide[7], self.bSide[7], self.rSide[7] = self.rSide[7], self.fSide[7], self.lSide[7], self.bSide[7]
def doR(self):
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]
self.fSide[7], self.uSide[7], self.bSide[3], self.dSide[7] = self.dSide[7], self.fSide[7], self.uSide[7], self.bSide[3]
self.fSide[0], self.uSide[0], self.bSide[4], self.dSide[0] = self.dSide[0], self.fSide[0], self.uSide[0], self.bSide[4]
self.fSide[1], self.uSide[1], self.bSide[5], self.dSide[1] = self.dSide[1], self.fSide[1], self.uSide[1], self.bSide[5]
def doF(self):
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]
self.uSide[1], self.rSide[3], self.dSide[5], self.lSide[7] = self.lSide[7], self.uSide[1], self.rSide[3], self.dSide[5]
self.uSide[2], self.rSide[4], self.dSide[6], self.lSide[0] = self.lSide[0], self.uSide[2], self.rSide[4], self.dSide[6]
self.uSide[3], self.rSide[5], self.dSide[7], self.lSide[1] = self.lSide[1], self.uSide[3], self.rSide[5], self.dSide[7]
def returnCrazy(self):
l = []
l.append(self.uSide)
l.append(self.fSide)
l.append(self.lSide)
l.append(self.bSide)
l.append(self.rSide)
return l#; print l
def doAlg(self, algString):
ialg = algString.replace('(', '') #get rid of unwanted
ialg = ialg.replace(')', '') # or otherwise unneeded characters
ialg = ialg.replace("2'", '2') # incl. whitespace, paren., 2's
ialg = ialg.replace(' ', ' ')
parts = ialg.split(' ') #Divide the alg up into individual moves
#parts.reverse()
for part in parts:
if part == 'U': self.doU()
elif part == 'U2': self.doU(); self.doU()
elif part == "U'": self.doU(); self.doU(); self.doU()
elif part == 'F': self.doF()
elif part == 'F2': self.doF(); self.doF()
elif part == "F'": self.doF(); self.doF(); self.doF()
elif part == 'R': self.doR()
elif part == 'R2': self.doR(); self.doR()
elif part == "R'": self.doR(); self.doR(); self.doR()
############### Writing the functions: start ###############
f = open('test.txt', 'w')
k = "#"*50 + '\n'
f.write(k)
f.write(' def doCrazy(self, a):\t#code generated with writing.py\n')
f.write(' temp = self\n\n')
f.write(' if a == "":\t#default (finished) case:\n')
f.write(' pass\n\n')
for x in range(1,len(algs)): #write a conditional procedure for each of these
f.write(' elif a == "' + algs[x] + '":\t#' + str(x) + '\n')
new = MyCube(); new.doAlg(algs[x])
a = new.returnCrazy(); print a, '\n\n'
f.write(' ')
######################################################################
############################ U: ############################
for x in range(0,8):#uSide
f.write('temp.' + a[0][x][0].lower() + 'Side[' + str(a[0][x][1]) + '] = self.uSide[' + str(x))
f.write(']; ') if x<7 else f.write(']')
############################ F: ############################
f.write('\n\n ')
for yf in range(5,8):
f.write('temp.' + a[1][yf][0].lower() + 'Side[' + str(a[1][yf][1]) + '] = self.fSide[' + str(yf))
f.write(']; ') if yf<7 else f.write(']')
############################ L: ############################
f.write('\n ')
for yl in range(5,8):
f.write('temp.' + a[2][yl][0].lower() + 'Side[' + str(a[2][yl][1]) + '] = self.lSide[' + str(yl))
f.write(']; ') if yl<7 else f.write(']')
############################ B: ############################
f.write('\n ')
for yb in range(5,8):
f.write('temp.' + a[3][yb][0].lower() + 'Side[' + str(a[3][yb][1]) + '] = self.bSide[' + str(yb))
f.write(']; ') if yb<7 else f.write(']')
############################ R: ############################
f.write('\n ')
for yr in range(5,8):
f.write('temp.' + a[4][yr][0].lower() + 'Side[' + str(a[4][yr][1]) + '] = self.rSide[' + str(yr))
f.write(']; ') if yr<7 else f.write(']')
############################ finish ############################
######################################################################
f.write('\n self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])\n\n')
f.write(' else: print "BAD"\n')
f.write(k)
f.close()
############### Writing the functions: end ###############
As is, this function outputs
-a .txt file that /should/ contain the equivalent of the sticker movement of each alg, by reference
-a matrix in real-time of what the cube should look like.
Right now, I'm certain that the output matrix is fine, which assures me that my doU, etc functions are correct as is.
However, the implementation of the def crazyAlg(etc): in the next file is obviously faulty. Yeah, it's long; I know.
Code:
import time
start = time.time()
algs = ["",
"R' U R' U' R' U' R' U R U R2",
"R U' R U R U R U' R' U' R2",
"R2 U2 R U2 R2 U2 R2 U2 R U2 R2",
"R2 U R2 U' R2 F2 R2 U' F2 U R2 F2",
"R U' R F2 R' U R' U' R2 F2 R2",
"R2 F2 R2 U R U' R F2 R' U R'",
"R U R' U R' U' R F' R U R' U' R' F R2 U' R2 U R",
"F' U2 R' U F U' F' U' R U' F",
"R U R' F' R U R' U' R' F R2 U' R'",
"R' U2 R U2 R' F R U R' U' R' F' R2",
"F' R' U' R F' R' U F' U' F' U F R F2",
"F2 R2 U' R' U' R F2 R' U R F2 U R2 F2",
"F2 R2 U' F2 R' U' R F2 R' U R U R2 F2",
"R' U' R2 U' R2 U' R U2 R2 F U R' U' R F' R",
"R' F R' U R U' F' R2 U2 R' U R2 U R2 U R",
"F' R U R' U' R' F R2 F U' R' U' R U F' R'",
"R' U R' F R F' R U' R' F' U F R U R' U' R",
"R U R' U' R' F R2 U' R' U' R U R' F'",
"F R U' R' U' R U R' F' R U R' U' R' F R F'",
"F' U2 F' U' R' F' R2 U' R' U R' F R U' F",
"R U' R U F R F2 U F U' F R' F' R'",
"U2"]
##################################################
class MyCube:
"""A virtual 3x3x3 matrix"""
uSide = [] #URF, UF, etc
fSide = [] #FRD, FD, etc
lSide = [] #LFD, LD, etc
bSide = [] #BRD, BD, etc
rSide = [] #RBD, RD, etc
dSide = [] #DBR, DR, etc
def __init__(self):
self.uSide = ['U', 'U', 'U', 'U', 'U', 'U', 'U', 'U'] #URF, UF, etc
self.fSide = ['F', 'F', 'F', 'F', 'F', 'F', 'F', 'F'] #FRD, FD, etc
self.lSide = ['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'] #LFD, LD, etc
self.bSide = ['B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'] #BRD, BD, etc
self.rSide = ['R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'] #RBD, RD, etc
self.dSide = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D'] #DBR, DR, etc
def resetSelf(self, new):
#print new
MyCube.uSide = new[0]; MyCube.fSide = new[1]; MyCube.lSide = new[2]
MyCube.bSide = new[3]; MyCube.rSide = new[4]; MyCube.dSide = new[5]
def doU(self):
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]
self.fSide[5], self.lSide[5], self.bSide[1], self.rSide[5] = self.rSide[5], self.fSide[5], self.lSide[5], self.bSide[1]
self.fSide[6], self.lSide[6], self.bSide[2], self.rSide[6] = self.rSide[6], self.fSide[6], self.lSide[6], self.bSide[2]
self.fSide[7], self.lSide[7], self.bSide[3], self.rSide[7] = self.rSide[7], self.fSide[7], self.lSide[7], self.bSide[3]
def doUp(self):
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]
self.rSide[5], self.fSide[5], self.lSide[5], self.bSide[1] = self.fSide[5], self.lSide[5], self.bSide[1], self.rSide[5]
self.rSide[6], self.fSide[6], self.lSide[6], self.bSide[2] = self.fSide[6], self.lSide[6], self.bSide[2], self.rSide[6]
self.rSide[7], self.fSide[7], self.lSide[7], self.bSide[3] = self.fSide[7], self.lSide[7], self.bSide[3], self.rSide[7]
def doR(self):
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]
self.fSide[7], self.uSide[7], self.bSide[7], self.dSide[7] = self.dSide[7], self.fSide[7], self.uSide[7], self.bSide[7]
self.fSide[0], self.uSide[0], self.bSide[0], self.dSide[0] = self.dSide[0], self.fSide[0], self.uSide[0], self.bSide[0]
self.fSide[1], self.uSide[1], self.bSide[1], self.dSide[1] = self.dSide[1], self.fSide[1], self.uSide[1], self.bSide[1]
def doRp(self):
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]
self.dSide[7], self.fSide[7], self.uSide[7], self.bSide[7] = self.fSide[7], self.uSide[7], self.bSide[7], self.dSide[7]
self.dSide[0], self.fSide[0], self.uSide[0], self.bSide[0] = self.fSide[0], self.uSide[0], self.bSide[0], self.dSide[0]
self.dSide[1], self.fSide[1], self.uSide[1], self.bSide[1] = self.fSide[1], self.uSide[1], self.bSide[1], self.dSide[1]
def doF(self):
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]
self.uSide[1], self.rSide[3], self.dSide[5], self.lSide[7] = self.lSide[7], self.uSide[1], self.rSide[3], self.dSide[5]
self.uSide[2], self.rSide[4], self.dSide[6], self.lSide[0] = self.lSide[0], self.uSide[2], self.rSide[4], self.dSide[6]
self.uSide[3], self.rSide[5], self.dSide[7], self.lSide[1] = self.lSide[1], self.uSide[3], self.rSide[5], self.dSide[7]
def doFp(self):
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]
self.lSide[7], self.uSide[1], self.rSide[3], self.dSide[5] = self.uSide[1], self.rSide[3], self.dSide[5], self.lSide[7]
self.lSide[0], self.uSide[2], self.rSide[4], self.dSide[6] = self.uSide[2], self.rSide[4], self.dSide[6], self.lSide[0]
self.lSide[1], self.uSide[3], self.rSide[5], self.dSide[7] = self.uSide[3], self.rSide[5], self.dSide[7], self.lSide[1]
def doAlg(self, algString):
ialg = algString.replace('(', '') #get rid of unwanted
ialg = ialg.replace(')', '') # or otherwise unneeded characters
ialg = ialg.replace("2'", '2') # incl. whitespace, paren., 2's
ialg = ialg.replace(' ', ' ')
parts = ialg.split(' ') #Divide the alg up into individual moves
parts.reverse()
for part in parts:
if part == 'U': self.doUp()
elif part == 'U2': self.doU(); self.doU()
elif part == "U'": self.doU()
elif part == 'F': self.doFp()
elif part == 'F2': self.doF(); self.doF()
elif part == "F'": self.doF()
elif part == 'R': self.doRp()
elif part == 'R2': self.doR(); self.doR()
elif part == "R'": self.doR()
##################################################
def doCrazy(self, a): #code generated with writing.py
temp = self
if a == "": #default (finished) case:
pass
elif a == "R' U R' U' R' U' R' U R U R2": #1
temp.uSide[6] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.bSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R U' R U R U R U' R' U' R2": #2
temp.uSide[2] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[4] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[6] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.lSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.bSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.fSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R2 U2 R U2 R2 U2 R2 U2 R U2 R2": #3
temp.uSide[4] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[6] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[2] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.bSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.fSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.lSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R2 U R2 U' R2 F2 R2 U' F2 U R2 F2": #4
temp.uSide[6] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[4] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[2] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[0] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.lSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.fSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.rSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.bSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R U' R F2 R' U R' U' R2 F2 R2": #5
temp.uSide[2] = self.uSide[0]; temp.uSide[3] = self.uSide[1]; temp.uSide[4] = self.uSide[2]; temp.uSide[1] = self.uSide[3]; temp.uSide[6] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[0] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.rSide[5] = self.fSide[5]; temp.lSide[6] = self.fSide[6]; temp.lSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.bSide[6] = self.lSide[6]; temp.fSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.rSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.fSide[5] = self.rSide[5]; temp.fSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R2 F2 R2 U R U' R F2 R' U R'": #6
temp.uSide[6] = self.uSide[0]; temp.uSide[3] = self.uSide[1]; temp.uSide[0] = self.uSide[2]; temp.uSide[1] = self.uSide[3]; temp.uSide[2] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.rSide[5] = self.fSide[5]; temp.rSide[6] = self.fSide[6]; temp.lSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.fSide[6] = self.lSide[6]; temp.fSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.fSide[5] = self.rSide[5]; temp.bSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R U R' U R' U' R F' R U R' U' R' F R2 U' R2 U R": #7
temp.uSide[6] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[0] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[2] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[3] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.rSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.fSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.fSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.bSide[6] = self.rSide[6]; temp.lSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "F' U2 R' U F U' F' U' R U' F": #8
temp.uSide[0] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[6] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[2] = self.uSide[4]; temp.uSide[3] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[5] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.bSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.fSide[5] = self.lSide[5]; temp.fSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.lSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.lSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.rSide[6] = self.rSide[6]; temp.bSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R U R' F' R U R' U' R' F R2 U' R'": #9
temp.uSide[6] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[3] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[5] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.fSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.lSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.lSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.bSide[6] = self.rSide[6]; temp.bSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R' U2 R U2 R' F R U R' U' R' F' R2": #10
temp.uSide[6] = self.uSide[0]; temp.uSide[5] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[1] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[3] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.rSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.bSide[7] = self.fSide[7]
temp.fSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.fSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.lSide[7] = self.bSide[7]
temp.lSide[5] = self.rSide[5]; temp.bSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "F' R' U' R F' R' U F' U' F' U F R F2": #11
temp.uSide[0] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[4] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[2] = self.uSide[4]; temp.uSide[7] = self.uSide[5]; temp.uSide[6] = self.uSide[6]; temp.uSide[5] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.lSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.bSide[5] = self.lSide[5]; temp.fSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.lSide[5] = self.bSide[5]; temp.bSide[6] = self.bSide[6]; temp.rSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.rSide[6] = self.rSide[6]; temp.bSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "F2 R2 U' R' U' R F2 R' U R F2 U R2 F2": #12
temp.uSide[0] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[4] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[6] = self.uSide[4]; temp.uSide[3] = self.uSide[5]; temp.uSide[2] = self.uSide[6]; temp.uSide[5] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.lSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.fSide[5] = self.lSide[5]; temp.bSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.lSide[5] = self.bSide[5]; temp.fSide[6] = self.bSide[6]; temp.lSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.rSide[6] = self.rSide[6]; temp.bSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "F2 R2 U' F2 R' U' R F2 R' U R U R2 F2": #13
temp.uSide[0] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[6] = self.uSide[2]; temp.uSide[5] = self.uSide[3]; temp.uSide[2] = self.uSide[4]; temp.uSide[7] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[3] = self.uSide[7]
temp.lSide[5] = self.fSide[5]; temp.bSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.bSide[5] = self.lSide[5]; temp.fSide[6] = self.lSide[6]; temp.bSide[7] = self.lSide[7]
temp.fSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.rSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.rSide[6] = self.rSide[6]; temp.lSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R' U' R2 U' R2 U' R U2 R2 F U R' U' R F' R": #14
temp.uSide[6] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[5] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[7] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[3] = self.uSide[7]
temp.lSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.bSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.bSide[7] = self.lSide[7]
temp.fSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.rSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.bSide[6] = self.rSide[6]; temp.lSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R' F R' U R U' F' R2 U2 R' U R2 U R2 U R": #15
temp.uSide[4] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[6] = self.uSide[4]; temp.uSide[3] = self.uSide[5]; temp.uSide[0] = self.uSide[6]; temp.uSide[5] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.fSide[5] = self.lSide[5]; temp.bSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.lSide[5] = self.bSide[5]; temp.rSide[6] = self.bSide[6]; temp.lSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.lSide[6] = self.rSide[6]; temp.bSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "F' R U R' U' R' F R2 F U' R' U' R U F' R'": #16
temp.uSide[4] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[6] = self.uSide[6]; temp.uSide[3] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.fSide[5] = self.bSide[5]; temp.bSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.lSide[6] = self.rSide[6]; temp.lSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R' U R' F R F' R U' R' F' U F R U R' U' R": #17
temp.uSide[4] = self.uSide[0]; temp.uSide[5] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[1] = self.uSide[5]; temp.uSide[6] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.bSide[7] = self.fSide[7]
temp.rSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.bSide[6] = self.bSide[6]; temp.fSide[7] = self.bSide[7]
temp.lSide[5] = self.rSide[5]; temp.lSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R U R' U' R' F R2 U' R' U' R U R' F'": #18
temp.uSide[4] = self.uSide[0]; temp.uSide[7] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[6] = self.uSide[6]; temp.uSide[1] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.rSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.rSide[5] = self.bSide[5]; temp.bSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.bSide[5] = self.rSide[5]; temp.lSide[6] = self.rSide[6]; temp.fSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "F R U' R' U' R U R' F' R U R' U' R' F R F'": #19
temp.uSide[0] = self.uSide[0]; temp.uSide[5] = self.uSide[1]; temp.uSide[2] = self.uSide[2]; temp.uSide[3] = self.uSide[3]; temp.uSide[6] = self.uSide[4]; temp.uSide[1] = self.uSide[5]; temp.uSide[4] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.fSide[5] = self.fSide[5]; temp.fSide[6] = self.fSide[6]; temp.bSide[7] = self.fSide[7]
temp.rSide[5] = self.lSide[5]; temp.bSide[6] = self.lSide[6]; temp.lSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.lSide[6] = self.bSide[6]; temp.fSide[7] = self.bSide[7]
temp.lSide[5] = self.rSide[5]; temp.rSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "F' U2 F' U' R' F' R2 U' R' U R' F R U' F": #20
temp.uSide[0] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[6] = self.uSide[2]; temp.uSide[5] = self.uSide[3]; temp.uSide[4] = self.uSide[4]; temp.uSide[3] = self.uSide[5]; temp.uSide[2] = self.uSide[6]; temp.uSide[7] = self.uSide[7]
temp.lSide[5] = self.fSide[5]; temp.bSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.fSide[5] = self.lSide[5]; temp.lSide[6] = self.lSide[6]; temp.bSide[7] = self.lSide[7]
temp.bSide[5] = self.bSide[5]; temp.fSide[6] = self.bSide[6]; temp.lSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.rSide[6] = self.rSide[6]; temp.rSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "R U' R U F R F2 U F U' F R' F' R'": #21
temp.uSide[2] = self.uSide[0]; temp.uSide[1] = self.uSide[1]; temp.uSide[0] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[4] = self.uSide[4]; temp.uSide[5] = self.uSide[5]; temp.uSide[6] = self.uSide[6]; temp.uSide[3] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.rSide[6] = self.fSide[6]; temp.fSide[7] = self.fSide[7]
temp.lSide[5] = self.lSide[5]; temp.lSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.fSide[5] = self.bSide[5]; temp.bSide[6] = self.bSide[6]; temp.bSide[7] = self.bSide[7]
temp.rSide[5] = self.rSide[5]; temp.fSide[6] = self.rSide[6]; temp.lSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
elif a == "U2": #22
temp.uSide[4] = self.uSide[0]; temp.uSide[5] = self.uSide[1]; temp.uSide[6] = self.uSide[2]; temp.uSide[7] = self.uSide[3]; temp.uSide[0] = self.uSide[4]; temp.uSide[1] = self.uSide[5]; temp.uSide[2] = self.uSide[6]; temp.uSide[3] = self.uSide[7]
temp.bSide[5] = self.fSide[5]; temp.bSide[6] = self.fSide[6]; temp.bSide[7] = self.fSide[7]
temp.rSide[5] = self.lSide[5]; temp.rSide[6] = self.lSide[6]; temp.rSide[7] = self.lSide[7]
temp.fSide[5] = self.bSide[5]; temp.fSide[6] = self.bSide[6]; temp.fSide[7] = self.bSide[7]
temp.lSide[5] = self.rSide[5]; temp.lSide[6] = self.rSide[6]; temp.lSide[7] = self.rSide[7]
self.resetSelf([temp.uSide, temp.fSide, temp.lSide, temp.bSide, temp.rSide, temp.dSide])
else: print "BAD"
##################################################
def checkSolved(self):
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]:
if self.fSide[5] == self.fSide[6] == self.fSide[7]:
if self.lSide[5] == self.lSide[6] == self.lSide[7]:
if self.rSide[5] == self.rSide[6] == self.rSide[7]:
if self.bSide[3] == self.bSide[2] == self.bSide[1]:
return True
return False
def printMin(self):
print
print " ", self.bSide[7] + self.bSide[6] + self.bSide[5]# + '\n'
print " " + self.lSide[5], self.uSide[5] + self.uSide[6] + self.uSide[7], self.rSide[7]
print " " + self.lSide[6], self.uSide[4] + "u" + self.uSide[0], self.rSide[6]
print " " + self.lSide[7], self.uSide[3] + self.uSide[2] + self.uSide[1], self.rSide[5]# + '\n'#\n'
print " ", self.fSide[5] + self.fSide[6] + self.fSide[7] + '\n'
def doAlg(self, algString):
ialg = algString.replace('(', '') #get rid of unwanted
ialg = ialg.replace(')', '') # or otherwise unneeded characters
ialg = ialg.replace("2'", '2') # incl. whitespace, paren., 2's
ialg = ialg.replace(' ', ' ')
parts = ialg.split(' ') #Divide the alg up into individual moves
parts.reverse()
for part in parts:
if part == 'U': self.doU(); self.doU(); self.doU()
elif part == 'U2': self.doU(); self.doU()
elif part == "U'": self.doU()
elif part == 'F': self.doF(); self.doF(); self.doF()
elif part == 'F2': self.doF(); self.doF()
elif part == "F'": self.doF()
elif part == 'R': self.doR(); self.doR(); self.doR()
elif part == 'R2': self.doR(); self.doR()
elif part == "R'": self.doR()
##################################################
for alg in algs:
new = MyCube()
#new.doAlg(alg)
new.doCrazy(alg)
new.printMin()
As for doCrazy, it often gives me 5 F stickers on the U face, or something crazy like that. I don't like that. In fact, U2 is giving me :
FFF
L UUU L
L UuU L
L UUU L
FFF
My question: Where in my writing of doCrazy did I go wrong?
This would be very highly appreciated, as I've been stressing over this for well over a week now.
Thanks,
Stachu Korick
