Revision 55b8c763
Added by Leszek Koltunski about 1 year ago
src/main/java/org/distorted/objectlib/tablebases/TBPyraminxDiamond.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
public class TBPyraminxDiamond extends TablebasesAbstract |
21 | 21 |
{ |
22 |
private static final int[][] CORNER_QUATS = |
|
23 |
{ |
|
24 |
{0,0,0,0}, |
|
25 |
{0,0,0,0}, |
|
26 |
{0,0,0,0}, |
|
27 |
{0,0,0,0}, |
|
28 |
{0,0,0,0}, |
|
29 |
{0,0,0,0}, |
|
30 |
}; |
|
31 |
|
|
32 |
private static final int[][] CENTER_QUATS = |
|
33 |
{ |
|
34 |
{0,0,0,0,0,0,0,0}, |
|
35 |
{0,0,0,0,0,0,0,0}, |
|
36 |
{0,0,0,0,0,0,0,0}, |
|
37 |
{0,0,0,0,0,0,0,0}, |
|
38 |
{0,0,0,0,0,0,0,0}, |
|
39 |
{0,0,0,0,0,0,0,0}, |
|
40 |
{0,0,0,0,0,0,0,0}, |
|
41 |
{0,0,0,0,0,0,0,0}, |
|
42 |
}; |
|
43 |
|
|
44 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
45 |
|
|
22 | 46 |
public TBPyraminxDiamond() |
23 | 47 |
{ |
24 | 48 |
super(); |
... | ... | |
116 | 140 |
return 8; |
117 | 141 |
} |
118 | 142 |
|
143 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
144 |
|
|
145 |
private int findIndex(int[] table, int entry) |
|
146 |
{ |
|
147 |
int len = table.length; |
|
148 |
|
|
149 |
for(int i=0; i<len; i++) |
|
150 |
if( table[i]==entry ) return i; |
|
151 |
|
|
152 |
return -1; |
|
153 |
} |
|
154 |
|
|
119 | 155 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
120 | 156 |
|
121 | 157 |
public int[] getQuats(int index) |
122 | 158 |
{ |
123 |
return null; |
|
159 |
int[] quats = new int[14]; |
|
160 |
int[] perm = new int[8]; |
|
161 |
int[] twist = new int[6]; |
|
162 |
|
|
163 |
int centers_perm_num = index/2048; |
|
164 |
int total_twist = index%2048; |
|
165 |
|
|
166 |
TablebaseHelpers.getPermutationFromNum(perm,8,centers_perm_num); |
|
167 |
boolean even = TablebaseHelpers.permutationIsEven(perm); |
|
168 |
|
|
169 |
for(int i=0; i<5; i++) { twist[i] = total_twist%4; total_twist /=4; } |
|
170 |
|
|
171 |
int total = twist[0]+twist[1]+twist[2]+twist[3]+twist[4]+(even?0:1); |
|
172 |
twist[5] = 2*(1-total_twist) + (total%2); |
|
173 |
|
|
174 |
for(int i=0; i<6; i++) quats[i ] = CORNER_QUATS[i][twist[i]]; |
|
175 |
for(int i=0; i<8; i++) quats[i+6] = CENTER_QUATS[i][perm[i]]; |
|
176 |
|
|
177 |
return quats; |
|
124 | 178 |
} |
125 | 179 |
|
126 | 180 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
127 | 181 |
|
128 | 182 |
public int getIndex(int[] quats) |
129 | 183 |
{ |
130 |
return 0; |
|
184 |
int[] twist = new int[6]; |
|
185 |
int[] perm = new int[8]; |
|
186 |
|
|
187 |
for(int i=0; i<6; i++) twist[i] = findIndex(CORNER_QUATS[i],quats[i]); |
|
188 |
for(int i=0; i<8; i++) perm[i] = findIndex(CENTER_QUATS[i],quats[i]); |
|
189 |
|
|
190 |
int centers_perm_num = TablebaseHelpers.computePermutationNum(perm); |
|
191 |
int total_twist = twist[0]+ 4*(twist[1]+ 4*(twist[2]+ 4*(twist[3]+ 4*(twist[4]+ 4*(twist[5]>1 ? 0:1))))); |
|
192 |
|
|
193 |
return total_twist + 2048*centers_perm_num; |
|
131 | 194 |
} |
132 | 195 |
} |
133 | 196 |
|
Also available in: Unified diff
Progress with the Pyraminx Diamond solver.