Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def update():
@app.route('/scramble')
def scramble():
scramble2(Rubiks)
Solver.ChooseCross()
Solver.Reset(Rubiks)
print Solver.Cross
return drawRubiks(Rubiks)

Expand Down
137 changes: 134 additions & 3 deletions app/solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ def __init__(self, rubiks):

def Update(self, rubiks):
self.Rubiks = rubiks

def Reset(self, rubiks):
self.Rubiks = rubiks
self.ChooseCross()
self.Count = 0
del self.Moves[:]
self.State = 1

# Chooses which color cross is best to go for
def ChooseCross(self):
Expand Down Expand Up @@ -72,7 +79,30 @@ def isCross(self, faceIndex, color):
return True
else:
return False


def isFirstCrossComplete(self, face):
if self.isCross(face.Number, self.Cross) == False:
return False
for x in range(0,3):
for y in range(0,3):
if (x == 1 and y != 1) or (x != 1 and y == 1):
stripColor = Colors(
self.Rubiks.CubeArray[face.Number].FaceMatrix[x][y].SquareSecn.Color)
if x == 0:
if stripColor != face.LeftFace.Color:
return False
elif x == 2:
if stripColor != face.RightFace.Color:
return False
elif y == 0:
if stripColor != face.UpFace.Color:
return False
elif y == 2:
if stripColor != face.DownFace.Color:
return False
return True
#### End of isFirstStripComplete

# Chooses best direction to go to make a cross
def MakeCross(self):

Expand Down Expand Up @@ -690,6 +720,88 @@ def CheckThirdStrip(face):

return

def OrientCross(self):
if len(self.Moves) != 0:
return self.Moves.pop(0)
else:
face = Face(faceMapper(faceColors.stringToInt(self.Cross)))
upSecn = False
downSecn = False
rightSecn = False
leftSecn = False
up = False
down = False
right = False
left = False
rubiksCopy = copy.deepcopy(self.Rubiks)

for i in range(0,4):
# Actual face check
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[0][1].Square.Color ==
Colors(self.Cross)):
left = True
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][0].Square.Color ==
Colors(self.Cross)):
up = True
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][2].Square.Color ==
Colors(self.Cross)):
down = True
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[2][1].Square.Color ==
Colors(self.Cross)):
right = True

# SquareSecn check
print rubiksCopy.CubeArray[face.Number].FaceMatrix[0][1].SquareSecn.Color
print Colors(face.LeftFace.Color)
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[0][1].SquareSecn.Color ==
Colors(face.LeftFace.Color)):
leftSecn = True
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][0].SquareSecn.Color ==
Colors(face.UpFace.Color)):
upSecn = True
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][2].SquareSecn.Color ==
Colors(face.DownFace.Color)):
downSecn = True
if (rubiksCopy.CubeArray[face.Number].FaceMatrix[2][1].SquareSecn.Color ==
Colors(face.RightFace.Color)):
rightSecn = True

# Logic
if up and upSecn:
if i == 3:
del self.Moves[:]
self.Moves.append(face.FrontInv)
self.Moves.append(face.Upper)
self.Moves.append(face.Upper)
return self.Moves.pop(0)
elif down and downSecn:
if i == 3:
del self.Moves[:]
self.Moves.append(face.FrontInv)
self.Moves.append(face.Down)
self.Moves.append(face.Down)
return self.Moves.pop(0)
elif right and rightSecn:
if i == 3:
del self.Moves[:]
self.Moves.append(face.FrontInv)
self.Moves.append(face.Right)
self.Moves.append(face.Right)
return self.Moves.pop(0)
elif left and leftSecn:
if i == 3:
del self.Moves[:]
self.Moves.append(face.FrontInv)
self.Moves.append(face.Left)
self.Moves.append(face.Left)
return self.Moves.pop(0)

face.Front(rubiksCopy)
self.Moves.append(face.Front)
up = right = left = down = False
upSecn = rightSecn = leftSecn = downSecn = False
del self.Moves[:]

def MakeMove(self):
#
# State 1: Making first cross on opposite face
Expand All @@ -710,8 +822,27 @@ def MakeMove(self):
# State 2: Orient first cross side pieces, and bring them
# to their correct face
#
#if self.State == 2:

if self.State == 2:
face = Face(faceColors.stringToInt(self.Cross))
if self.isFirstCrossComplete(face):
print "State 2 -> State 3"
self.State += 1
else:
print "Still State 2"
move = self.OrientCross()
if move != None:
return move
else:
print "Semantic error in state: 2"
return None

#
# State 3: Get the four corners of the first face
#
if self.State == 3:
# For Andy to implement
self.State += 1




Expand Down