Пример #1
0
 def find_unsolved(self, cube, print_debug=False):
   unsolved = []
   for dest_edge, dest_edge2 in Cube.cw_corners_on_face('up'):
     #print dest_edge, dest_edge2
     if cube.get_color('up', dest_edge, dest_edge2) != 'yellow':
       corner_neighbors = Cube.cw_neighbor_corners(
           ('up', dest_edge, dest_edge2))
       #print corner_neighbors
       colors = [cube.get_color(face, edge, edge2)
           for face, edge, edge2 in corner_neighbors]
       #print colors
       yellow_index = colors.index('yellow')
       assert yellow_index == 1 or yellow_index == 2
       yellow_corner = corner_neighbors[yellow_index]
       unsolved.append(Unsolved(
           yellow_corner[0], yellow_corner[1], yellow_corner[2],
           'up', dest_edge, dest_edge2))
   return unsolved
Пример #2
0
 def solve_case(self, cube, unsolved, print_debug=False):
   case = unsolved[0]
   if print_debug: print "DEBUG: case = " + str(case)
   source_cubie = (case.source_face, case.source_edge, case.source_edge2)
   if cube.is_cubie_in_layer(source_cubie, 'up'):
     corner_neighbors = Cube.cw_neighbor_corners(source_cubie)
     upper_corners = [c for c in corner_neighbors if c[0] == 'up']
     assert (len(upper_corners) == 1)
     upper_corner = upper_corners[0]
     setup_move = cube.get_simple_move_corners(
         'up', (upper_corner[1], upper_corner[2]), \
         (case.dest_edge, case.dest_edge2))
     times = setup_move[1]
     if times != 0:
       if print_debug: print "DEBUG: returning setup_move " + str([setup_move])
       return [setup_move]
     upper_corner_index = corner_neighbors.index(upper_corner)
     if upper_corner_index == 0:
       edge_below = tuple([f for f in source_cubie if f != 'up'])
       assert len(edge_below) == 2
       setup_sequence = cube.get_move_cubie_into_layer(edge_below, 'up')
       if print_debug: print "DEBUG: edge_below = {0}, setup_sequence = {1}".format(edge_below, setup_sequence)
       steps = setup_sequence + [('up', 2)] + \
           Solver.reverse_sequence(setup_sequence)
     elif upper_corner_index == 1:
       steps = [(case.source_face, 3), ('up', 3), (case.source_face, 1)]
     elif upper_corner_index == 2:
       steps = [(case.source_face, 1), ('up', 1), (case.source_face, 3)]
     else:
       raise Exception("upper_corner_index should be 0, 1, or 2")
     if print_debug: print "DEBUG: returning upper_corner_index " + str(upper_corner_index) + ", steps = " + str(steps)
     return steps
   else:
     setup_sequence = cube.get_move_cubie_into_layer(source_cubie, 'up')
     if print_debug: print "DEBUG: setup_sequence = " + str(setup_sequence)
     steps = setup_sequence + [('up', 1)] + \
         Solver.reverse_sequence(setup_sequence)
     if print_debug: print "DEBUG: returning steps = " + str(steps)
     return steps
Пример #3
0
  def solve_case(self, cube, unsolved, print_debug=False):
    if print_debug: print "DEBUG: unsolved = " + str([str(u) for u in unsolved])
    case = unsolved[0]

    source_corner = (case.source_face, case.source_edge, case.source_edge2)
    dest_corner = (case.dest_face, case.dest_edge, case.dest_edge2)

    source_non_upper_edges = tuple([f for f in source_corner if f != 'up'])
    setup_sequence = [cube.get_simple_move_corners('up',
        source_non_upper_edges, ('right', 'back'))]

    dest_corner_neighbors = Cube.cw_neighbor_corners(dest_corner)
    corner_index = dest_corner_neighbors.index(source_corner)
    assert corner_index == 1 or corner_index == 2

    if corner_index == 1:
      steps = [('down', 1), ('right', 1), ('down', 3), ('right', 3),
          ('down', 1), ('right', 1), ('down', 3), ('right', 3)]
    else:
      steps = [('right', 1), ('down', 1), ('right', 3), ('down', 3),
          ('right', 1), ('down', 1), ('right', 3), ('down', 3)]

    return setup_sequence + steps