js/src/devtools/jint/sunspider/access-fannkuch.js

branch
TOR_BUG_9701
changeset 12
7540298fafa1
equal deleted inserted replaced
-1:000000000000 0:00ea63742cd1
1 /* The Great Computer Language Shootout
2 http://shootout.alioth.debian.org/
3 contributed by Isaac Gouy */
4
5 function fannkuch(n) {
6 var check = 0;
7 var perm = Array(n);
8 var perm1 = Array(n);
9 var count = Array(n);
10 var maxPerm = Array(n);
11 var maxFlipsCount = 0;
12 var m = n - 1;
13
14 /* BEGIN LOOP */
15 for (var i = 0; i < n; i++) perm1[i] = i;
16 /* END LOOP */
17 var r = n;
18
19 /* BEGIN LOOP */
20 while (true) {
21 // write-out the first 30 permutations
22 if (check < 30){
23 var s = "";
24 /* BEGIN LOOP */
25 for(var i=0; i<n; i++) s += (perm1[i]+1).toString();
26 /* END LOOP */
27 check++;
28 }
29
30 /* BEGIN LOOP */
31 while (r != 1) { count[r - 1] = r; r--; }
32 /* END LOOP */
33 if (!(perm1[0] == 0 || perm1[m] == m)) {
34 /* BEGIN LOOP */
35 for (var i = 0; i < n; i++) perm[i] = perm1[i];
36 /* END LOOP */
37
38 var flipsCount = 0;
39 var k;
40
41 /* BEGIN LOOP */
42 while (!((k = perm[0]) == 0)) {
43 var k2 = (k + 1) >> 1;
44 /* BEGIN LOOP */
45 for (var i = 0; i < k2; i++) {
46 var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp;
47 }
48 /* END LOOP */
49 flipsCount++;
50 }
51 /* END LOOP */
52
53 if (flipsCount > maxFlipsCount) {
54 maxFlipsCount = flipsCount;
55 /* BEGIN LOOP */
56 for (var i = 0; i < n; i++) maxPerm[i] = perm1[i];
57 /* END LOOP */
58 }
59 }
60
61 /* BEGIN LOOP */
62 while (true) {
63 if (r == n) return maxFlipsCount;
64 var perm0 = perm1[0];
65 var i = 0;
66 /* BEGIN LOOP */
67 while (i < r) {
68 var j = i + 1;
69 perm1[i] = perm1[j];
70 i = j;
71 }
72 /* END LOOP */
73 perm1[r] = perm0;
74
75 count[r] = count[r] - 1;
76 if (count[r] > 0) break;
77 r++;
78 }
79 /* END LOOP */
80 }
81 /* END LOOP */
82 }
83
84 var n = 8;
85 var ret = fannkuch(n);
86

mercurial