Last active
August 29, 2015 14:00
-
-
Save LizardLeliel/28dcc93d304fa745bee5 to your computer and use it in GitHub Desktop.
Rubix's Cube classes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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