1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/sunspider/check-access-fannkuch.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,66 @@ 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 + for (var i = 0; i < n; i++) perm1[i] = i; 1.18 + var r = n; 1.19 + 1.20 + while (true) { 1.21 + // write-out the first 30 permutations 1.22 + if (check < 30){ 1.23 + var s = ""; 1.24 + for(var i=0; i<n; i++) s += (perm1[i]+1).toString(); 1.25 + check++; 1.26 + } 1.27 + 1.28 + while (r != 1) { count[r - 1] = r; r--; } 1.29 + if (!(perm1[0] == 0 || perm1[m] == m)) { 1.30 + for (var i = 0; i < n; i++) perm[i] = perm1[i]; 1.31 + 1.32 + var flipsCount = 0; 1.33 + var k; 1.34 + 1.35 + while (!((k = perm[0]) == 0)) { 1.36 + var k2 = (k + 1) >> 1; 1.37 + for (var i = 0; i < k2; i++) { 1.38 + var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp; 1.39 + } 1.40 + flipsCount++; 1.41 + } 1.42 + 1.43 + if (flipsCount > maxFlipsCount) { 1.44 + maxFlipsCount = flipsCount; 1.45 + for (var i = 0; i < n; i++) maxPerm[i] = perm1[i]; 1.46 + } 1.47 + } 1.48 + 1.49 + while (true) { 1.50 + if (r == n) return maxFlipsCount; 1.51 + var perm0 = perm1[0]; 1.52 + var i = 0; 1.53 + while (i < r) { 1.54 + var j = i + 1; 1.55 + perm1[i] = perm1[j]; 1.56 + i = j; 1.57 + } 1.58 + perm1[r] = perm0; 1.59 + 1.60 + count[r] = count[r] - 1; 1.61 + if (count[r] > 0) break; 1.62 + r++; 1.63 + } 1.64 + } 1.65 +} 1.66 + 1.67 +var n = 8; 1.68 +var ret = fannkuch(n); 1.69 +assertEq(ret, 22)