mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-25 11:22:58 +00:00
66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
/* The Great Computer Language Shootout
|
|
http://shootout.alioth.debian.org/
|
|
contributed by Isaac Gouy */
|
|
|
|
function fannkuch(n) {
|
|
var check = 0;
|
|
var perm = Array(n);
|
|
var perm1 = Array(n);
|
|
var count = Array(n);
|
|
var maxPerm = Array(n);
|
|
var maxFlipsCount = 0;
|
|
var m = n - 1;
|
|
|
|
for (var i = 0; i < n; i++) perm1[i] = i;
|
|
var r = n;
|
|
|
|
while (true) {
|
|
// write-out the first 30 permutations
|
|
if (check < 30){
|
|
var s = "";
|
|
for(var i=0; i<n; i++) s += (perm1[i]+1).toString();
|
|
check++;
|
|
}
|
|
|
|
while (r != 1) { count[r - 1] = r; r--; }
|
|
if (!(perm1[0] == 0 || perm1[m] == m)) {
|
|
for (var i = 0; i < n; i++) perm[i] = perm1[i];
|
|
|
|
var flipsCount = 0;
|
|
var k;
|
|
|
|
while (!((k = perm[0]) == 0)) {
|
|
var k2 = (k + 1) >> 1;
|
|
for (var i = 0; i < k2; i++) {
|
|
var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp;
|
|
}
|
|
flipsCount++;
|
|
}
|
|
|
|
if (flipsCount > maxFlipsCount) {
|
|
maxFlipsCount = flipsCount;
|
|
for (var i = 0; i < n; i++) maxPerm[i] = perm1[i];
|
|
}
|
|
}
|
|
|
|
while (true) {
|
|
if (r == n) return maxFlipsCount;
|
|
var perm0 = perm1[0];
|
|
var i = 0;
|
|
while (i < r) {
|
|
var j = i + 1;
|
|
perm1[i] = perm1[j];
|
|
i = j;
|
|
}
|
|
perm1[r] = perm0;
|
|
|
|
count[r] = count[r] - 1;
|
|
if (count[r] > 0) break;
|
|
r++;
|
|
}
|
|
}
|
|
}
|
|
|
|
var n = 8;
|
|
var ret = fannkuch(n);
|
|
|