@@ -14,10 +14,10 @@ class CoordCube(object):
14
14
N_URtoUL = 1320 # 12!/(12-3)! permutation of UR,UF,UL edges
15
15
N_UBtoDF = 1320 # 12!/(12-3)! permutation of UB,DR,DF edges
16
16
N_URtoDF = 20160 # 8!/(8-6)! permutation of UR,UF,UL,UB,DR,DF edges in phase2
17
-
17
+
18
18
N_URFtoDLB = 40320 # 8! permutations of the corners
19
19
N_URtoBR = 479001600 # 8! permutations of the corners
20
-
20
+
21
21
N_MOVE = 18
22
22
23
23
# twistMove = [[0 for _ in range(N_MOVE)] for _ in range( N_TWIST )] ## CUIDADO CON LAS REFERENCIAS
@@ -29,32 +29,32 @@ class CoordCube(object):
29
29
# UBtoDF_Move = [[0 for _ in range(N_MOVE)] for _ in range( N_UBtoDF )]
30
30
# MergeURtoULandUBtoDF = [[0 for _ in range(336)] for _ in range( 336 )]
31
31
32
- Slice_URFtoDLF_Parity_Prun = [- 1 ] * (N_SLICE2 * N_URFtoDLF * N_PARITY // 2 )
33
- Slice_URtoDF_Parity_Prun = [- 1 ] * (N_SLICE2 * N_URtoDF * N_PARITY // 2 )
34
- Slice_Twist_Prun = [- 1 ] * (N_SLICE1 * N_TWIST // 2 + 1 )
35
- Slice_Flip_Prun = [- 1 ] * (N_SLICE1 * N_FLIP // 2 )
36
-
32
+ # Slice_URFtoDLF_Parity_Prun = [-1] * (N_SLICE2 * N_URFtoDLF * N_PARITY // 2)
33
+ # Slice_URtoDF_Parity_Prun = [-1] * (N_SLICE2 * N_URtoDF * N_PARITY // 2)
34
+ # Slice_Twist_Prun = [-1] * (N_SLICE1 * N_TWIST // 2 + 1)
35
+ # Slice_Flip_Prun = [-1] * (N_SLICE1 * N_FLIP // 2)
36
+
37
37
## Parity of the corner permutation. This is the same as the parity for the edge permutation of a valid cube.
38
38
## parity has values 0 and 1
39
39
parityMove = [
40
40
[1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 ],
41
41
[0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 ]
42
42
]
43
-
43
+
44
44
@staticmethod
45
45
def setPruning (table , index , value ):
46
46
if (index & 1 ) == 0 :
47
47
table [index // 2 ] &= (0xf0 | value )
48
48
else :
49
49
table [index // 2 ] &= (0x0f | (value << 4 ))
50
-
50
+
51
51
@staticmethod
52
52
def getPruning (table , index ):
53
53
if (index & 1 ) == 0 :
54
54
return table [index // 2 ] & 0x0f
55
55
else :
56
56
return (table [index // 2 ] & 0xf0 ) >> 4
57
-
57
+
58
58
def __init__ (self , c ):
59
59
''' c is a CubieCube instance'''
60
60
if not isinstance (c , CubieCube ):
@@ -67,7 +67,7 @@ def __init__(self, c):
67
67
self .URtoUL = c .getURtoUL ()
68
68
self .UBtoDF = c .getUBtoDF ()
69
69
self .URtoDF = c .getURtoDF () # only needed in phase2
70
-
70
+
71
71
def move (self , m ):
72
72
'''A move on the coordinate level'''
73
73
self .twist = self .twistMove [self .twist ][m ]
@@ -80,7 +80,7 @@ def move(self, m):
80
80
if self .URtoUL < 336 and self .UBtoDF < 336 : # updated only if UR,UF,UL,UB,DR,DF
81
81
# are not in UD-slice
82
82
self .URtoDF = self .MergeURtoULandUBtoDF [self .URtoUL ][self .UBtoDF ]
83
-
83
+
84
84
## Init more static values of class CubieCube
85
85
def read_or_func_list (file_name , func ):
86
86
abspath = os .path .join (os .path .dirname (os .path .abspath (__file__ )), file_name )
@@ -101,7 +101,7 @@ def read_or_func_matrix(file_name, func):
101
101
return ret
102
102
103
103
def build_twist_move ():
104
- twist_move = CoordCube .twistMove
104
+ twist_move = [[ 0 for _ in range ( CoordCube .N_MOVE )] for _ in range ( CoordCube . N_TWIST )]
105
105
a = CubieCube ()
106
106
for i in range (CoordCube .N_TWIST ):
107
107
a .setTwist (i )
@@ -113,7 +113,7 @@ def build_twist_move():
113
113
return twist_move
114
114
115
115
def build_flip_move ():
116
- flip_move = CoordCube .flipMove
116
+ flip_move = [[ 0 for _ in range ( CoordCube .N_MOVE )] for _ in range ( CoordCube . N_FLIP )]
117
117
a = CubieCube ()
118
118
for i in range (CoordCube .N_FLIP ):
119
119
a .setFlip (i )
@@ -125,7 +125,7 @@ def build_flip_move():
125
125
return flip_move
126
126
127
127
def build_urf_to_dlf ():
128
- urf_to_dlf = CoordCube .URFtoDLF_Move
128
+ urf_to_dlf = [[ 0 for _ in range ( CoordCube .N_MOVE )] for _ in range ( CoordCube . N_URFtoDLF )]
129
129
a = CubieCube ()
130
130
for i in range (CoordCube .N_URFtoDLF ):
131
131
a .setURFtoDLF (i )
@@ -137,7 +137,7 @@ def build_urf_to_dlf():
137
137
return urf_to_dlf
138
138
139
139
def build_fr_to_br ():
140
- fr_to_br = CoordCube .FRtoBR_Move
140
+ fr_to_br = [[ 0 for _ in range ( CoordCube .N_MOVE )] for _ in range ( CoordCube . N_FRtoBR )]
141
141
a = CubieCube ()
142
142
for i in range (CoordCube .N_FRtoBR ):
143
143
a .setFRtoBR (i )
@@ -149,7 +149,7 @@ def build_fr_to_br():
149
149
return fr_to_br
150
150
151
151
def build_ur_to_df ():
152
- ur_to_df = CoordCube .URtoDF_Move
152
+ ur_to_df = [[ 0 for _ in range ( CoordCube .N_MOVE )] for _ in range ( CoordCube . N_URtoDF )]
153
153
a = CubieCube ()
154
154
for i in range (CoordCube .N_URtoDF ):
155
155
a .setURtoDF (i )
@@ -161,7 +161,7 @@ def build_ur_to_df():
161
161
return ur_to_df
162
162
163
163
def build_ur_to_ul ():
164
- ur_to_ul = CoordCube .URtoUL_Move
164
+ ur_to_ul = [[ 0 for _ in range ( CoordCube .N_MOVE )] for _ in range ( CoordCube . N_URtoUL )]
165
165
a = CubieCube ()
166
166
for i in range (CoordCube .N_URtoUL ):
167
167
a .setURtoUL (i )
@@ -173,7 +173,7 @@ def build_ur_to_ul():
173
173
return ur_to_ul
174
174
175
175
def build_ub_to_df ():
176
- ub_to_df = CoordCube .UBtoDF_Move
176
+ ub_to_df = [[ 0 for _ in range ( CoordCube .N_MOVE )] for _ in range ( CoordCube . N_UBtoDF )]
177
177
a = CubieCube ()
178
178
for i in range (CoordCube .N_URtoUL ):
179
179
a .setUBtoDF (i )
@@ -185,14 +185,14 @@ def build_ub_to_df():
185
185
return ub_to_df
186
186
187
187
def build_merge_ur_to_ul_and_ub_to_df ():
188
- merge_ur_to_ul_and_ub_to_df = CoordCube . MergeURtoULandUBtoDF
188
+ merge_ur_to_ul_and_ub_to_df = [[ 0 for _ in range ( 336 )] for _ in range ( 336 )]
189
189
for uRtoUL in range (336 ):
190
190
for uBtoDF in range (336 ):
191
191
merge_ur_to_ul_and_ub_to_df [uRtoUL ][uBtoDF ] = CubieCube .getURtoDFs (uRtoUL , uBtoDF )
192
192
return merge_ur_to_ul_and_ub_to_df
193
193
194
194
def build_slice_urf_to_dlf_parity_prun ():
195
- slice_urf_to_dlf_parity_prun = CoordCube .Slice_URFtoDLF_Parity_Prun
195
+ slice_urf_to_dlf_parity_prun = [ - 1 ] * ( CoordCube .N_SLICE2 * CoordCube . N_URFtoDLF * CoordCube . N_PARITY // 2 )
196
196
CoordCube .setPruning (slice_urf_to_dlf_parity_prun , 0 , 0 )
197
197
done , depth = 1 , 0
198
198
while done < CoordCube .N_SLICE2 * CoordCube .N_URFtoDLF * CoordCube .N_PARITY :
@@ -213,7 +213,7 @@ def build_slice_urf_to_dlf_parity_prun():
213
213
return slice_urf_to_dlf_parity_prun
214
214
215
215
def build_slice_ur_to_df_parity_prun ():
216
- slice_ur_to_df_parity_prun = CoordCube .Slice_URtoDF_Parity_Prun
216
+ slice_ur_to_df_parity_prun = [ - 1 ] * ( CoordCube .N_SLICE2 * CoordCube . N_URtoDF * CoordCube . N_PARITY // 2 )
217
217
CoordCube .setPruning (slice_ur_to_df_parity_prun , 0 , 0 )
218
218
done , depth = 1 , 0
219
219
while done != (CoordCube .N_SLICE2 * CoordCube .N_URtoDF * CoordCube .N_PARITY ):
@@ -233,7 +233,7 @@ def build_slice_ur_to_df_parity_prun():
233
233
return slice_ur_to_df_parity_prun
234
234
235
235
def build_slice_twist_prun ():
236
- slice_twist_prun = CoordCube .Slice_Twist_Prun
236
+ slice_twist_prun = [ - 1 ] * ( CoordCube .N_SLICE1 * CoordCube . N_TWIST // 2 + 1 )
237
237
CoordCube .setPruning (slice_twist_prun , 0 , 0 )
238
238
done , depth = 1 , 0
239
239
while done < (CoordCube .N_SLICE1 * CoordCube .N_TWIST ):
@@ -251,7 +251,7 @@ def build_slice_twist_prun():
251
251
return slice_twist_prun
252
252
253
253
def build_slice_flip_prun ():
254
- slice_flip_prun = CoordCube .Slice_Flip_Prun
254
+ slice_flip_prun = [ - 1 ] * ( CoordCube .N_SLICE1 * CoordCube . N_FLIP // 2 )
255
255
CoordCube .setPruning (slice_flip_prun , 0 , 0 )
256
256
done , depth = 1 , 0
257
257
while done < (CoordCube .N_SLICE1 * CoordCube .N_FLIP ):
0 commit comments