예제 #1
0
파일: cube.py 프로젝트: cpoulet/Rubiks
 def setSlice(self, n):
     sliceE = [11, 10, 9, 8]
     otherE = [7, 6, 5, 4, 3, 2, 1, 0]
     for i in range(12):
         if n - binomial(11 - i, len(sliceE)) >= 0:
             n -= binomial(11 - i, len(sliceE))
             self.ep[i] = sliceE.pop()
         else:
             self.ep[i] = otherE.pop()
예제 #2
0
파일: cube.py 프로젝트: cpoulet/Rubiks
 def setSliceSorted(self, n):
     sliceE = [8, 9, 10, 11]
     otherE = [7, 6, 5, 4, 3, 2, 1, 0]
     m = n % 24
     n = n // 24
     for i in range(1, 4):
         k = m % (i + 1)
         m //= i + 1
         while k > 0:
             rotRight(sliceE, 0, i)
             k -= 1
     sliceE = sliceE[::-1]
     for i in range(12):
         if n - binomial(11 - i, len(sliceE)) >= 0:
             n -= binomial(11 - i, len(sliceE))
             self.ep[i] = sliceE.pop()
         else:
             self.ep[i] = otherE.pop()
예제 #3
0
파일: cube.py 프로젝트: cpoulet/Rubiks
 def getSlice(self):
     # UD-Slice : position of edges FR, FL, BL, BR without permutation : 4 parmi 12
     n = 0
     x = 1
     for i in range(11, -1, -1):
         if self.ep[i] in {8, 9, 10, 11}:
             n += binomial(11 - i, x)
             x += 1
     return n
예제 #4
0
파일: cube.py 프로젝트: cpoulet/Rubiks
 def setDownEdges(self, n):
     sliceE = [4, 5, 6, 7]
     otherE = [3, 2, 1, 0, 11, 10, 9, 8]
     m = n % 24  # Permutation
     n = n // 24  # Location
     for i in range(1, 4):
         k = m % (i + 1)
         m //= i + 1
         while k > 0:
             rotRight(sliceE, 0, i)
             k -= 1
     sliceE = sliceE[::-1]
     for i in range(12):
         if n - binomial(11 - i, len(sliceE)) >= 0:
             n -= binomial(11 - i, len(sliceE))
             self.ep[i] = sliceE.pop()
         else:
             self.ep[i] = otherE.pop()
     for _ in range(4):
         rotLeft(self.ep, 0, 11)
예제 #5
0
파일: cube.py 프로젝트: cpoulet/Rubiks
 def getSliceSorted(self):
     # UD-Slice : position of edges FR, FL, BL, BR with permutation
     # 12 * 11 * 10 * 9 = 11880
     # < 11880 in phase 1, < 24 in phase 2, 0 for solved cube
     n = 0
     edge = []
     # n < 495 (4 parmi 12)
     for i in range(11, -1, -1):
         if self.ep[i] in {8, 9, 10, 11}:
             n += binomial(11 - i, len(edge) + 1)
             edge.append(self.ep[i])
     # m < 24 (4!) permutations
     edge = edge[::-1]
     m = 0
     for i in range(3, 0, -1):
         k = 0
         while edge[i] != i + 8:
             rotLeft(edge, 0, i)
             k += 1
         m = (i + 1) * m + k
     return 24 * n + m
예제 #6
0
파일: cube.py 프로젝트: cpoulet/Rubiks
 def getDownEdges(self):
     # DownEdges : position of edges DR, DF, DL, DB with permutation
     # 12 * 11 * 10 * 9 = 11880
     # < 11880 in phase 1, < 1656 + 24 in phase 2, 1656 for solved cube
     n = 0
     edge = []
     ep = self.ep[8:] + self.ep[:8]
     # n < 495 (4 parmi 12)
     for i in range(11, -1, -1):
         if ep[i] in {4, 5, 6, 7}:
             n += binomial(11 - i, len(edge) + 1)
             edge.append(ep[i])
     # m < 24 (4!) permutations
     edge = edge[::-1]
     m = 0
     for i in range(3, 0, -1):
         k = 0
         while edge[i] != i + 4:
             rotLeft(edge, 0, i)
             k += 1
         m = (i + 1) * m + k
     return 24 * n + m