Project

General

Profile

« Previous | Next » 

Revision 766bf4c4

Added by Leszek Koltunski 9 months ago

Debugs for the crash in Dino6 solver

View differences:

src/main/java/org/distorted/objectlib/tablebases/TBDino6.java
20 20
  private static final int SOLVED2 = 17977621; // quats (0,10,0,10, 11,11,11,11, 0,10,0,10)
21 21

  
22 22
  private OperatingSystemInterface mOS;
23
  private int[] perm11;
23 24

  
24 25
///////////////////////////////////////////////////////////////////////////////////////////////////
25 26

  
......
35 36
    super(os,new int[] {R.raw.dino_3_pruning3,R.raw.dino_3_pruning4},new int[] {R.raw.dino_3_pruning10});
36 37

  
37 38
    mOS = os;
39
    perm11 = new int[11];
38 40
    }
39 41

  
40 42
///////////////////////////////////////////////////////////////////////////////////////////////////
......
97 99
  public static int getIndexFromPerm(int[] perm)
98 100
    {
99 101
    int[] perm11 = new int[11];
100

  
101
    for(int i=0; i<11; i++)
102
      {
103
      if( perm[i+1]<=0 ) return -1;
104
      perm11[i] = perm[i+1]-1;
105
      }
106

  
102
    for(int i=0; i<11; i++) perm11[i] = perm[i+1]-1;
107 103
    return TablebaseHelpers.computeEvenPermutationNum(perm11);
108 104
    }
109 105

  
......
111 107

  
112 108
  int[] getQuats(int index)
113 109
    {
114
    int[] perm11 = new int[11];
115 110
    TablebaseHelpers.getEvenPermutationFromNum(perm11,index);
116
    int[] perm = new int[12];
117
    for(int i=1; i<12; i++) perm[i] = perm11[i-1]+1;
118
    return getQuatsFromPerm(perm);
111
    int[] perm12 = new int[12];
112
    for(int i=1; i<12; i++) perm12[i] = perm11[i-1]+1;
113
    return getQuatsFromPerm(perm12);
119 114
    }
120 115

  
121 116
///////////////////////////////////////////////////////////////////////////////////////////////////
......
124 119
    {
125 120
    normalizeQuats(quats);
126 121
    int[] perm = getPermFromQuats(quats);
127
    int ret = getIndexFromPerm(perm);
128 122

  
129
    if( ret<0 )
123
    for(int i=0; i<11; i++)
130 124
      {
131
      if( mOS!=null )
125
      if( perm[i+1]<=0 )
132 126
        {
133
        StringBuilder sb = new StringBuilder();
134

  
135
        for(int i=0; i<12; i++)
127
        if( mOS!=null )
136 128
          {
137
          sb.append(quats[i]);
138
          sb.append(' ');
129
          StringBuilder sb = new StringBuilder();
130
          for(int j=0; j<12; j++) { sb.append(quats[j]); sb.append(' '); }
131
          mOS.reportError("TBDino6 getIndex: "+sb+" lastSolvingIndex: "+mLastSolvingIndex);
139 132
          }
140

  
141
        mOS.reportError("TBDino6 getIndex: "+sb);
133
        return 0;
142 134
        }
143
      return 0;
135

  
136
      perm11[i] = perm[i+1]-1;
144 137
      }
145 138

  
146
    return ret;
139
    return TablebaseHelpers.computeEvenPermutationNum(perm11);
147 140
    }
148 141
}  
149 142

  
src/main/java/org/distorted/objectlib/tablebases/TablebasesAbstract.java
39 39
  private int[][] mQuatMult;
40 40
  private int[] mInvertedQuat;
41 41

  
42
  private ArrayList<int[]> mMoves;
43

  
42 44
  Tablebase mTablebase;
43 45
  boolean mInitialized;
46
  int mLastSolvingIndex;
44 47

  
45 48
  final int mScalingFactor;
46 49
  final int mNumAxis;
......
475 478
    {
476 479
    if( !mInitialized ) return null;
477 480

  
481
    if( mMoves==null ) mMoves = new ArrayList<>();
482
    else               mMoves.clear();
483

  
478 484
    int[] data = new int[4];
479 485
    byte level = mTablebase.retrievePacked(index);
480
    ArrayList<int[]> moves = new ArrayList<>();
481 486
    int[] quats = getQuats(index);
482 487
    int numQuats = quats.length;
483 488
    int[] tmpQuats = new int[numQuats];
489
    mLastSolvingIndex = index;
484 490

  
485 491
    while( !isSolved(index) )
486 492
      {
......
519 525
          if( ((newLevel-level+1)%3) == 0 )
520 526
            {
521 527
            int[] tmpMove = newMove(ax,layer,angle);
522
            moves.add(tmpMove);
528
            mMoves.add(tmpMove);
523 529
            index = childIndex;
524 530
            level = (level==0 ? 2 : (byte)(level-1));
525 531
            found = true;
......
538 544
        }
539 545
      }
540 546

  
541
    int[][] ret = convertMovesFromArray(moves);
547
    int[][] ret = convertMovesFromArray(mMoves);
542 548
    return extraInfo(ret,extra);
543 549
    }
544 550

  
......
632 638

  
633 639
  public void test(OperatingSystemInterface os)
634 640
    {
641
    /*
635 642
    int index = 252373232;
636 643
    int[] q = getQuats(index);
637 644
    TablebaseHelpers.displayTable(q , "QUATS ");
645
    */
646

  
647
    int[] extra = new int[4];
648

  
649
    for(int i=6525000; i<19958400; i++)
650
      {
651
      int[][] sol = solution(i,extra,os);
652
      if( (i%1000)==0 ) android.util.Log.e("D ", "solving: "+i);
653
      }
638 654
    }
639 655
}
src/main/java/org/distorted/objectlib/tablebases/TablebasesPruning.java
445 445

  
446 446
  public int[][] solution(int index, int[] extra, OperatingSystemInterface osi)
447 447
    {
448
    mLastSolvingIndex = index;
448 449
    if( isSolved(index) ) return null;
449 450
    int lastA=-1, lastR=0;
450 451
    int[][] highMoves = traverseBlock(index,mHighTables,lastA,lastR);

Also available in: Unified diff