• Welcome to SpeedSolving.com — the world’s largest puzzle community!

    You’re currently browsing as a guest, which means you have limited access to discussions, resources, member profiles, and community features.

    Join 50,000+ cubers and puzzle enthusiasts from around the world to ask questions, share solves, improve faster, and be part of the community.

    Registration is free, fast, and easy — create your account today.

    Already a member? Log in here to hide this message and start participating.

Python Cube Implementation Help Needed

StachuK1992

statue
Joined
Jul 24, 2008
Messages
3,812
Location
West Chester, PA
WCA
2008KORI02
YouTube
Visit Channel
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:
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()
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
 
SS is being extremely extremely slow for me, so I'll just make an 'edit' here since it won't let me in my first post.

The section of code I think is wrong:
Code:
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(']')
 
Back
Top