Project

General

Profile

« Previous | Next » 

Revision 4ad82629

Added by Leszek Koltunski almost 2 years ago

Ivy solver finished

View differences:

src/main/java/org/distorted/solvers/SolverIvyCube.java
15 15
import org.distorted.objectlib.main.ObjectType;
16 16
import org.distorted.objectlib.main.TwistyObject;
17 17
import org.distorted.objectlib.tablebases.ImplementedTablebasesList;
18
import org.distorted.objectlib.tablebases.TablebaseHelpers;
18 19
import org.distorted.objectlib.tablebases.TablebasesAbstract;
19 20

  
20 21
///////////////////////////////////////////////////////////////////////////////////////////////////
......
145 146
    return 0;
146 147
    }
147 148

  
148
///////////////////////////////////////////////////////////////////////////////////////////////////
149

  
150
  private int swaps(int val, int[] buffer, int len)
151
    {
152
    int ret = 0;
153

  
154
    for(int i=0; i<len; i++)
155
      {
156
           if( buffer[i] >val ) ret++;
157
      else if( buffer[i]==val ) return ret;
158
      }
159

  
160
    return -1;
161
    }
162

  
163
///////////////////////////////////////////////////////////////////////////////////////////////////
164

  
165
  private boolean permutationIsEven(int[] buffer)
166
    {
167
    int len = buffer.length;
168
    int numOfSwaps = 0;
169
    for(int i=0; i<len; i++) numOfSwaps += swaps(i,buffer,len);
170
    return (numOfSwaps%2==0);
171
    }
172

  
173 149
///////////////////////////////////////////////////////////////////////////////////////////////////
174 150

  
175 151
  private int computeCenterColors(int[] buffer, int[] faceColors, int[] centers)
......
183 159
          buffer[center]=color;
184 160
          }
185 161

  
186
    return permutationIsEven(buffer) ? 0 : ERROR_TWO_CENTERS_SWAP;
162
    return TablebaseHelpers.permutationIsEven(buffer) ? 0 : ERROR_TWO_CENTERS_SWAP;
187 163
    }
188 164
////////////////////////////////////////////////////////////////////////////////////////
189 165

  
......
194 170
    return 2;
195 171
    }
196 172

  
197
///////////////////////////////////////////////////////////////////////////////////////////////////
198

  
199
  private int computeOrder(int[] permutation, int index)
200
    {
201
    int numOfSmaller = 0;
202
    int val = permutation[index];
203

  
204
    for(int i=0; i<index; i++)
205
      if( permutation[i]<val ) numOfSmaller++;
206

  
207
    return val-numOfSmaller;
208
    }
209

  
210
///////////////////////////////////////////////////////////////////////////////////////////////////
211

  
212
  private int computeEvenPermutationNum(int[] permutation)
213
    {
214
    int n0 = computeOrder(permutation,0);
215
    int n1 = computeOrder(permutation,1);
216
    int n2 = computeOrder(permutation,2);
217
    int n3 = computeOrder(permutation,3);
218

  
219
    return n0 + 6*(n1+ 5*(n2+4*n3));
220
    }
221

  
222 173
///////////////////////////////////////////////////////////////////////////////////////////////////
223 174

  
224 175
  public SolverIvyCube(Resources res, TwistyObject object)
......
243 194
    for(int i=0; i<6; i++)
244 195
      centers[i] = object.getCubitFaceStickerIndex(i+4,0) - 6;
245 196

  
246
for(int i=0; i<4; i++)
247
  {
248
  android.util.Log.e("D", "corner "+i+" : "+corners[i][0]+" "+corners[i][1]+" "+corners[i][2]);
249
  }
250
for(int i=0; i<6; i++)
251
  {
252
  android.util.Log.e("D", "center "+i+" : "+centers[i]);
253
  }
254

  
255 197
    int result1 = checkAllCentersPresent(centers);
256 198
    if( result1<0 ) return result1;
257 199

  
......
266 208
    twist[2] = computeCornerTwist(corners[2],face_colors[4]);
267 209
    twist[3] = computeCornerTwist(corners[3],face_colors[5]);
268 210

  
269
    int perm_num = computeEvenPermutationNum(center_colors);
270

  
271
  android.util.Log.e("D", "twist : "+twist[0]+" "+twist[1]+" "+twist[2]+" "+twist[3]);
272

  
273
    int ret = perm_num + 360*(twist[0]+ 3*(twist[1]+ 3*(twist[2]+ 3*twist[3])));
274

  
275
android.util.Log.e("D", "index: "+ret+" perm_num="+perm_num);
211
    int perm_num = TablebaseHelpers.computeEvenPermutationNum(center_colors);
276 212

  
277
    return ret;
213
    return perm_num + 360*(twist[0]+ 3*(twist[1]+ 3*(twist[2]+ 3*twist[3])));
278 214
    }
279 215

  
280 216
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff