Advertisement
LucasSousa

Square-1 Scrambler (bad working, but Ok)

Mar 6th, 2016
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.02 KB | None | 0 0
  1. import random as r
  2.  
  3.  
  4. class Peca(object):
  5.     pass
  6.  
  7.  
  8. class Edge(Peca):
  9.     def __init__(self, name):
  10.         self.name = name
  11.  
  12.     def getPieceName(self):
  13.         return self.name
  14.  
  15.     def __str__(self):
  16.         return self.name
  17.  
  18.  
  19. class Corner(Peca):
  20.     def __init__(self, name):
  21.         self.name = name
  22.  
  23.     def getPieceName(self):
  24.         return self.name
  25.  
  26.     def __str__(self):
  27.         return self.name
  28.  
  29.  
  30. class SquareOne(object):
  31.     a = Edge('a')
  32.     b = Corner('b')
  33.     c = Edge('c')
  34.     d = Corner('d')
  35.     e = Edge('e')
  36.     f = Corner('f')
  37.     g = Edge('g')
  38.     h = Corner('h')
  39.     #
  40.     i = Edge('i')
  41.     j = Corner('j')
  42.     k = Edge('k')
  43.     l = Corner('l')
  44.     m = Edge('m')
  45.     n = Corner('n')
  46.     o = Edge('o')
  47.     p = Corner('p')
  48.  
  49.     posicoes = [
  50.         # Peças da camada U
  51.         a, b, b, c, d, d, e, f, f, g, h, h,
  52.         # Peças da camada D
  53.         i, j, j, k, l, l, m, n, n, o, p, p]
  54.  
  55.     def U(self, movimento):
  56.         TOOOOOOP_pieces = self.posicoes[0:12]
  57.         ll = len(TOOOOOOP_pieces)
  58.  
  59.         if movimento > 0:
  60.             for i in range(movimento):
  61.                 aux = [TOOOOOOP_pieces[ll - 1]]
  62.                 for j in range(ll):
  63.                     aux.append(TOOOOOOP_pieces[j])
  64.                     if j is (ll - 1):
  65.                         break
  66.                 TOOOOOOP_pieces = aux
  67.         elif movimento < 0:
  68.             for i in range(movimento * (-1)):
  69.                 deleted = TOOOOOOP_pieces[0]
  70.                 TOOOOOOP_pieces.remove(deleted)
  71.                 TOOOOOOP_pieces.append(deleted)
  72.  
  73.         ultimos = self.posicoes[12:len(self.posicoes)]
  74.  
  75.         self.posicoes[0:12] = TOOOOOOP_pieces
  76.         self.posicoes[12:24] = ultimos
  77.  
  78.     def D(self, movimento):
  79.         botton_pieces = self.posicoes[12:24]
  80.         ll = len(botton_pieces)
  81.  
  82.         if movimento > 0:
  83.             for i in range(movimento):
  84.                 aux = [botton_pieces[ll - 1]]
  85.                 for j in range(ll):
  86.                     aux.append(botton_pieces[j])
  87.                     if j is (ll - 1):
  88.                         break
  89.                 botton_pieces = aux
  90.         elif movimento < 0:
  91.             for i in range(movimento * (-1)):
  92.                 deleted = botton_pieces[0]
  93.                 botton_pieces.remove(deleted)
  94.                 botton_pieces.append(deleted)
  95.  
  96.         primeiros = self.posicoes[0:12]
  97.  
  98.         self.posicoes[0:12] = primeiros
  99.         self.posicoes[12:24] = botton_pieces
  100.  
  101.     def barra(self):
  102.  
  103.         corte_de_U = self.posicoes[1:7]
  104.         corte_de_D = self.posicoes[12:18]
  105.  
  106.         for i in range(6):
  107.             aux = corte_de_U[i]
  108.             aux2 = corte_de_D[i]
  109.             corte_de_U[i] = aux2
  110.             corte_de_D[i] = aux
  111.  
  112.         self.posicoes[1:7] = corte_de_U
  113.         self.posicoes[12:18] = corte_de_D
  114.  
  115.     def isTravado(self):
  116.         aux = self.posicoes
  117.         if aux[0] is aux[1] or aux[6] is aux[7] or aux[17] is aux[18] or aux[23] is aux[12]:
  118.             return True
  119.         return False
  120.  
  121.     def __str__(self):
  122.         toPrint = ''
  123.         for i in range(self.posicoes.__len__()):
  124.             toPrint += self.posicoes[i].__str__() + " "
  125.             if i is 11:
  126.                 toPrint += "\n\n"
  127.         return toPrint
  128.  
  129.  
  130. class Embaralhador(object):
  131.     moves = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6]
  132.     sq1 = SquareOne()
  133.  
  134.     sorteadosOk = []
  135.  
  136.     def embaralhar(self):
  137.  
  138.         u = r.choice(self.moves)
  139.         d = r.choice(self.moves)
  140.  
  141.         self.sq1.U(u)
  142.         self.sq1.D(d)
  143.  
  144.         if self.sq1.isTravado():
  145.             self.sq1.U(u*-1)
  146.             self.sq1.D(d*-1)
  147.             self.embaralhar()
  148.         else:
  149.             self.sq1.barra()
  150.             self.sorteadosOk.append([u, d])
  151.  
  152.     def scramble(self):
  153.         for i in range(5):
  154.             self.embaralhar()
  155.  
  156.         s = ''
  157.         oks = self.sorteadosOk
  158.  
  159.         for i in range(len(oks)):
  160.             s += '(' + str(oks[i][0]) + ',' + str(oks[i][1]) + ')/'
  161.  
  162.         return s
  163.  
  164.  
  165. print(Embaralhador().scramble())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement