Project

General

Profile

« Previous | Next » 

Revision 4d63b066

Added by Leszek Koltunski about 1 year ago

Beginnings of the 2x2x3 solver.

View differences:

src/main/java/org/distorted/objectlib/tablebases/TablebaseHelpers.java
32 32
    {
33 33
    int len = buffer.length;
34 34
    int numOfSwaps = 0;
35
    for(int i=0; i<len; i++) numOfSwaps += swaps(i,buffer,len);
35
    for(int i=0; i<len-1; i++) numOfSwaps += swaps(i,buffer,len);
36 36
    return (numOfSwaps%2==0);
37 37
    }
38 38

  
......
46 46

  
47 47
    for(int i=0; i<len; i++)
48 48
      {
49
      int n = swaps(len-1-i,permutation,len+2);
50

  
51
      ret += n;
49
      ret += swaps(len-1-i,permutation,len+2);
52 50

  
53 51
      if( i<len-1 )
54 52
        {
......
120 118
          break;
121 119
          }
122 120
        }
121
    }
122

  
123
///////////////////////////////////////////////////////////////////////////////////////////////////
124

  
125
  public static int computePermutationNum(int[] permutation)
126
    {
127
    int len = permutation.length-1;
128
    int ret = 0;
129
    int mul = 3;
130

  
131
    for(int i=0; i<len; i++)
132
      {
133
      ret += swaps(len-1-i,permutation,len+1);
134

  
135
      if( i<len-1 )
136
        {
137
        ret *= mul;
138
        mul++;
139
        }
140
      }
141

  
142
    return ret;
143
    }
123 144

  
145
///////////////////////////////////////////////////////////////////////////////////////////////////
146

  
147
  public static void getPermutationFromNum(int[] buffer,int permSize, int permNum)
148
    {
149
    int index = permSize;
150
    int len = permSize-1;
151

  
152
    for(int i=0; i<permSize; i++) buffer[i]=-1;
153

  
154
    for(int i=0; i<len; i++)
155
      {
156
      int swaps = (permNum%index);
157
      permNum /= index;
158
      index--;
159

  
160
      for(int j=0; j<permSize; j++)
161
        {
162
        if( buffer[j]==-1 )
163
          {
164
          if( swaps==0 )
165
            {
166
            buffer[j] = i;
167
            break;
168
            }
169
          swaps--;
170
          }
171
        }
172
      }
173

  
174
    for(int i=0; i<permSize; i++)
175
      if( buffer[i]==-1 )
176
        {
177
        buffer[i] = permSize-1;
178
        break;
179
        }
124 180
    }
125 181
}

Also available in: Unified diff