fannkuch-redux Node.js #8 program
source code
/* The Computer Language Benchmarks Game
https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
Naive transliteration from Rex Kerr's Scala program
contributed by Isaac Gouy
*/
function fannkuch(n) {
const perm1 = [n]
for (let i = 0; i < n; i++) perm1[i] = i
const perm = [n]
const count = [n]
f = 0, flips = 0, nperm = 0, checksum = 0
let i, k, r
r = n
while (r > 0) {
i = 0
while (r != 1) { count[r-1] = r; r -= 1 }
while (i < n) { perm[i] = perm1[i]; i += 1 }
// Count flips and update max and checksum
f = 0
k = perm[0]
while (k != 0) {
i = 0
while (2*i < k) {
let t = perm[i]; perm[i] = perm[k-i]; perm[k-i] = t
i += 1
}
k = perm[0]
f += 1
}
if (f > flips) flips = f
if ((nperm & 0x1) == 0) checksum += f; else checksum -= f
// Use incremental change to generate another permutation
var more = true
while (more) {
if (r == n) {
console.log( checksum )
return flips
}
let p0 = perm1[0]
i = 0
while (i < r) {
let j = i + 1
perm1[i] = perm1[j]
i = j
}
perm1[r] = p0
count[r] -= 1
if (count[r] > 0) more = false; else r += 1
}
nperm += 1
}
return flips;
}
let n = (+process.argv.length > 2)
? +process.argv[2]
: 7
console.log(`Pfannkuchen(${n}) = ${fannkuch(n)}`)
notes, command-line, and program output
NOTES:
64-bit Ubuntu quad core
v23.0.0
Tue, 22 Oct 2024 22:45:11 GMT
MAKE:
cp -L fannkuchredux.node-8.node fannkuchredux.js
0.21s to complete and log all make actions
COMMAND LINE:
/opt/src/node-v23.0.0/bin/node fannkuchredux.js 12
PROGRAM OUTPUT:
3968050
Pfannkuchen(12) = 65