Skip to content

Instantly share code, notes, and snippets.

@LizardLeliel
Last active August 29, 2015 14:00
Show Gist options
  • Save LizardLeliel/28dcc93d304fa745bee5 to your computer and use it in GitHub Desktop.
Save LizardLeliel/28dcc93d304fa745bee5 to your computer and use it in GitHub Desktop.
Rubix's Cube classes
import random
#Before the Saint Mary's competition, I've written two classes to use for creating a Rubix cube, to practice
#Objects in object-oriented languages.
#This was the basis of which I derived my Visual Basic Rubix Classes Module.
class Face:
def __init__(self, colour):
self.colour = colour
self.row1 = [self.colour,self.colour,self.colour]
self.row2 = [self.colour,self.colour,self.colour]
self.row3 = [self.colour,self.colour,self.colour]
self.col1 = [self.row1[0], self.row2[0], self.row3[0]]
self.col2 = [self.row1[1], self.row2[1], self.row3[1]]
self.col3 = [self.row1[2], self.row2[2], self.row3[2]]
self.face = [self.row1, self.row2, self.row3]
def update(self):
self.face = [self.row1, self.row2, self.row3]
self.col1 = [self.row1[0], self.row2[0], self.row3[0]]
self.col2 = [self.row1[1], self.row2[1], self.row3[1]]
self.col3 = [self.row1[2], self.row2[2], self.row3[2]]
def rotateclockwise(self):
col1, col2, col3 = [], [], []
for each in self.face:
col1.insert(0, each[0])
col2.insert(0, each[1])
col3.insert(0, each[2])
self.row1, self.row2, self.row3 = col1, col2, col3
self.update()
def rotatecounterclockwise(self):
col1, col2, col3 = [], [], []
for each in self.face:
col1.append(each[2])
col2.append(each[1])
col3.append(each[0])
self.row1, self.row2, self.row3 = col1, col2, col3
self.update()
def injecttoprow(self, row):
self.row1 = row
self.update()
def rinjecttoprow(self, row):
row.reverse()
self.row1 = row
self.update()
def injectbottomrow(self, row):
self.row3 = row
self.update()
def rinjectbottomrow(self, row):
row.reverse()
self.row3 = row
self.update()
def injectleftcolumn(self, column):
self.row1[0] = column[0]
self.row2[0] = column[1]
self.row3[0] = column[2]
self.update()
def rinjectleftcolumn(self, column):
self.row1[0] = column[2]
self.row2[0] = column[1]
self.row3[0] = column[0]
self.update()
def injectrightcolumn(self, column):
self.row1[2] = column[0]
self.row2[2] = column[1]
self.row3[2] = column[2]
self.update()
def rinjectrightcolumn(self, column):
self.row1[2] = column[2]
self.row2[2] = column[1]
self.row3[2] = column[0]
self.update()
def printface(self):
for each in self.face:
print each
# _/Y Y Y\_
# _/_/Y Y Y\_\_
# / / /Y Y Y\ \ \
# B B B R R R G G G O O O
# B B B R R R G G G O O O
# B B B R R R G G G O O O
# \_\_\W W W/_/_/
# \_\W W W/_/
# \W W W/
class Cube:
def __init__(self):
self.colours= {"R": 0, "B": 1, "G": 2, "Y": 3, "W": 4, "O": 5}
self.red = Face("R")
self.blue = Face("B")
self.green = Face("G")
self.yellow = Face("Y")
self.white = Face("W")
self.orange = Face("O")
self.tracing= False
self.printmapping()
def printmapping(self):
for each in self.yellow.face: print(" " + " ".join(each))
print " ".join(self.blue.row1), " ".join(self.red.row1), " ".join(self.green.row1), " ".join(self.orange.row1)
print " ".join(self.blue.row2), " ".join(self.red.row2), " ".join(self.green.row2), " ".join(self.orange.row2)
print " ".join(self.blue.row3), " ".join(self.red.row3), " ".join(self.green.row3), " ".join(self.orange.row3)
for each in self.white.face: print(" " + " ".join(each))
def updateallfaces(self):
self.orange.update()
self.blue.update()
self.green.update()
self.yellow.update()
self.red.update()
self.white.update()
if self.tracing: self.printmapping()
def yellowclockwise(self):
self.yellow.rotateclockwise()
buff = self.red.row1
self.red.injecttoprow(self.green.row1)
self.green.injecttoprow(self.orange.row1)
self.orange.injecttoprow(self.blue.row1)
self.blue.injecttoprow(buff)
if self.tracing: print("Yellow clockwise")
self.updateallfaces()
def yellowcounterclockwise(self):
self.yellow.rotatecounterclockwise()
buff = self.red.row1
self.red.injecttoprow(self.blue.row1)
self.blue.injecttoprow(self.orange.row1)
self.orange.injecttoprow(self.green.row1)
self.green.injecttoprow(buff)
if self.tracing: print("Yellow counter clockwise")
self.updateallfaces()
def redclockwise(self):
self.red.rotateclockwise()
buff = self.yellow.row3
self.yellow.rinjectbottomrow(self.blue.col3)
self.blue.injectrightcolumn(self.white.row1)
self.white.rinjecttoprow(self.green.col1)
self.green.injectleftcolumn(buff)
if self.tracing: print("Red clockwise")
self.updateallfaces()
def redcounterclockwise(self):
self.red.rotatecounterclockwise()
buff = self.yellow.row3
self.yellow.injectbottomrow(self.green.col1)
self.green.rinjectleftcolumn(self.white.row1)
self.white.injecttoprow(self.blue.col3)
self.blue.rinjectrightcolumn(buff)
if self.tracing: print("Red counter clockwise")
self.updateallfaces()
def whiteclockwise(self):
self.white.rotateclockwise()
buff = self.red.row3
self.red.injectbottomrow(self.blue.row3)
self.blue.injectbottomrow(self.orange.row3)
self.orange.injectbottomrow(self.green.row3)
self.green.injectbottomrow(buff)
if self.tracing: print("White clockwise")
self.updateallfaces()
def whitecounterclockwise(self):
self.white.rotatecounterclockwise()
buff = self.red.row3
self.red.injectbottomrow(self.green.row3)
self.green.injectbottomrow(self.orange.row3)
self.orange.injectbottomrow(self.blue.row3)
self.blue.injectbottomrow(buff)
if self.tracing: print("White counter clockwise")
self.updateallfaces()
def blueclockwise(self):
self.blue.rotateclockwise()
buff = self.red.col1
self.red.injectleftcolumn(self.yellow.col1)
self.yellow.rinjectleftcolumn(self.orange.col3)
self.orange.rinjectrightcolumn(self.white.col1)
self.white.injectleftcolumn(buff)
if self.tracing: print("Blue clockwise")
self.updateallfaces()
def bluecounterclockwise(self):
self.blue.rotatecounterclockwise()
buff = self.red.col1
self.red.injectleftcolumn(self.white.col1)
self.white.rinjectleftcolumn(self.orange.col3)
self.orange.injectrightcolumn(self.yellow.col1)
self.yellow.injectleftcolumn(buff)
if self.tracing: print("Blue counter clockwise")
self.updateallfaces()
def greencounterclockwise(self):
self.green.rotatecounterclockwise()
buff = self.red.col3
self.red.injectrightcolumn(self.yellow.col3)
self.yellow.rinjectrightcolumn(self.orange.col1)
self.orange.rinjectleftcolumn(self.white.col3)
self.white.injectrightcolumn(buff)
if self.tracing: print("Green counter clockwise")
self.updateallfaces()
def greenclockwise(self):
self.green.rotateclockwise()
buff = self.red.col3
self.red.injectrightcolumn(self.white.col3)
self.white.rinjectrightcolumn(self.orange.col1)
self.orange.rinjectleftcolumn(self.yellow.col3)
self.yellow.injectrightcolumn(buff)
if self.tracing: print("Green clockwise")
self.updateallfaces()
def orangeclockwise(self):
self.orange.rotateclockwise()
buff = self.yellow.row1
self.yellow.injecttoprow(self.green.col3)
self.green.rinjectrightcolumn(self.white.row3)
self.white.injectbottomrow(self.blue.col1)
self.blue.rinjectleftcolumn(buff)
if self.tracing: print("Orange clockwise")
self.updateallfaces()
def orangecounterclockwise(self):
self.orange.rotatecounterclockwise()
buff = self.yellow.row1
self.yellow.rinjecttoprow(self.blue.col1)
self.blue.injectleftcolumn(self.white.row3)
self.white.rinjectbottomrow(self.green.col3)
self.green.injectrightcolumn(buff)
if self.tracing: print("Orange counter clockwise")
self.updateallfaces()
def randommoves(self, movements):
for movement in range(movements):
decision = random.randint(1, 12)
if decision == 1: self.yellowclockwise()
elif decision == 2: self.yellowcounterclockwise()
elif decision == 3: self.redclockwise()
elif decision == 4: self.redcounterclockwise()
elif decision == 5: self.whiteclockwise()
elif decision == 6: self.whitecounterclockwise()
elif decision == 7: self.blueclockwise()
elif decision == 8: self.bluecounterclockwise()
elif decision == 9: self.greencounterclockwise()
elif decision == 10:self.greenclockwise()
elif decision == 11:self.orangeclockwise()
elif decision == 12:self.orangecounterclockwise()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment