Project

General

Profile

« Previous | Next » 

Revision 55b8c763

Added by Leszek Koltunski about 1 year ago

Progress with the Pyraminx Diamond solver.

View differences:

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