Sat, 03 Jan 2015 20:18:00 +0100
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);