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

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* The Great Computer Language Shootout
     2    http://shootout.alioth.debian.org/
     3    contributed by Isaac Gouy */
     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;
    14    /* BEGIN LOOP */
    15    for (var i = 0; i < n; i++) perm1[i] = i;
    16    /* END LOOP */
    17    var r = n;
    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       }
    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 */
    38          var flipsCount = 0;
    39          var k;
    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 */
    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       }
    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;
    75          count[r] = count[r] - 1;
    76          if (count[r] > 0) break;
    77          r++;
    78       }
    79       /* END LOOP */
    80    }
    81    /* END LOOP */
    82 }
    84 var n = 8;
    85 var ret = fannkuch(n);

mercurial