michael@0: /* The Great Computer Language Shootout michael@0: http://shootout.alioth.debian.org/ michael@0: contributed by Isaac Gouy */ michael@0: michael@0: function fannkuch(n) { michael@0: var check = 0; michael@0: var perm = Array(n); michael@0: var perm1 = Array(n); michael@0: var count = Array(n); michael@0: var maxPerm = Array(n); michael@0: var maxFlipsCount = 0; michael@0: var m = n - 1; michael@0: michael@0: for (var i = 0; i < n; i++) perm1[i] = i; michael@0: var r = n; michael@0: michael@0: while (true) { michael@0: // write-out the first 30 permutations michael@0: if (check < 30){ michael@0: var s = ""; michael@0: for(var i=0; i> 1; michael@0: for (var i = 0; i < k2; i++) { michael@0: var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp; michael@0: } michael@0: flipsCount++; michael@0: } michael@0: michael@0: if (flipsCount > maxFlipsCount) { michael@0: maxFlipsCount = flipsCount; michael@0: for (var i = 0; i < n; i++) maxPerm[i] = perm1[i]; michael@0: } michael@0: } michael@0: michael@0: while (true) { michael@0: if (r == n) return maxFlipsCount; michael@0: var perm0 = perm1[0]; michael@0: var i = 0; michael@0: while (i < r) { michael@0: var j = i + 1; michael@0: perm1[i] = perm1[j]; michael@0: i = j; michael@0: } michael@0: perm1[r] = perm0; michael@0: michael@0: count[r] = count[r] - 1; michael@0: if (count[r] > 0) break; michael@0: r++; michael@0: } michael@0: } michael@0: } michael@0: michael@0: var n = 8; michael@0: var ret = fannkuch(n); michael@0: assertEq(ret, 22)