1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/devtools/jint/sunspider/access-fannkuch.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,86 @@ 1.4 +/* The Great Computer Language Shootout 1.5 + http://shootout.alioth.debian.org/ 1.6 + contributed by Isaac Gouy */ 1.7 + 1.8 +function fannkuch(n) { 1.9 + var check = 0; 1.10 + var perm = Array(n); 1.11 + var perm1 = Array(n); 1.12 + var count = Array(n); 1.13 + var maxPerm = Array(n); 1.14 + var maxFlipsCount = 0; 1.15 + var m = n - 1; 1.16 + 1.17 + /* BEGIN LOOP */ 1.18 + for (var i = 0; i < n; i++) perm1[i] = i; 1.19 + /* END LOOP */ 1.20 + var r = n; 1.21 + 1.22 + /* BEGIN LOOP */ 1.23 + while (true) { 1.24 + // write-out the first 30 permutations 1.25 + if (check < 30){ 1.26 + var s = ""; 1.27 + /* BEGIN LOOP */ 1.28 + for(var i=0; i<n; i++) s += (perm1[i]+1).toString(); 1.29 + /* END LOOP */ 1.30 + check++; 1.31 + } 1.32 + 1.33 + /* BEGIN LOOP */ 1.34 + while (r != 1) { count[r - 1] = r; r--; } 1.35 + /* END LOOP */ 1.36 + if (!(perm1[0] == 0 || perm1[m] == m)) { 1.37 + /* BEGIN LOOP */ 1.38 + for (var i = 0; i < n; i++) perm[i] = perm1[i]; 1.39 + /* END LOOP */ 1.40 + 1.41 + var flipsCount = 0; 1.42 + var k; 1.43 + 1.44 + /* BEGIN LOOP */ 1.45 + while (!((k = perm[0]) == 0)) { 1.46 + var k2 = (k + 1) >> 1; 1.47 + /* BEGIN LOOP */ 1.48 + for (var i = 0; i < k2; i++) { 1.49 + var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp; 1.50 + } 1.51 + /* END LOOP */ 1.52 + flipsCount++; 1.53 + } 1.54 + /* END LOOP */ 1.55 + 1.56 + if (flipsCount > maxFlipsCount) { 1.57 + maxFlipsCount = flipsCount; 1.58 + /* BEGIN LOOP */ 1.59 + for (var i = 0; i < n; i++) maxPerm[i] = perm1[i]; 1.60 + /* END LOOP */ 1.61 + } 1.62 + } 1.63 + 1.64 + /* BEGIN LOOP */ 1.65 + while (true) { 1.66 + if (r == n) return maxFlipsCount; 1.67 + var perm0 = perm1[0]; 1.68 + var i = 0; 1.69 + /* BEGIN LOOP */ 1.70 + while (i < r) { 1.71 + var j = i + 1; 1.72 + perm1[i] = perm1[j]; 1.73 + i = j; 1.74 + } 1.75 + /* END LOOP */ 1.76 + perm1[r] = perm0; 1.77 + 1.78 + count[r] = count[r] - 1; 1.79 + if (count[r] > 0) break; 1.80 + r++; 1.81 + } 1.82 + /* END LOOP */ 1.83 + } 1.84 + /* END LOOP */ 1.85 +} 1.86 + 1.87 +var n = 8; 1.88 +var ret = fannkuch(n); 1.89 +