fannkuch-redux F# .NET Core program
source code
(* The Computer Language Benchmarks Game
http://benchmarksgame.alioth.debian.org/
from Scala version by Otto Bommer, August 2010
*)
let fannkuch n =
begin
let perm1 = Array.create n 0 in for i = 0 to (n-1) do perm1.[i] <- i done;
let perm = Array.create n 0
let count = Array.create n 0
let mutable flips = 0
let mutable maxflips = 0
let mutable checksum = 0
let mutable nperm = 0
let mutable r = n
while r > 0 do
for i = 0 to n-1 do perm.[i] <- perm1.[i] done;
while r <> 1 do count.[r-1] <- r; r <- r - 1; done;
flips <- 0;
let k = ref perm.[0] in
while !k <> 0 do
let t = ref 0 in
for i = 0 to !k / 2 do
t := perm.[i];
perm.[i] <- perm.[!k - i];
perm.[!k - i] <- !t;
done;
k := perm.[0];
flips <- flips + 1;
done;
maxflips <- max maxflips flips;
if nperm &&& 1 = 0 then checksum <- checksum + flips else checksum <- checksum - flips
let mutable go = true in
let mutable t = 0 in
while go do
if r = n then begin go <- false; r <- 0; end
else
begin
t <- perm1.[0];
for i = 0 to r - 1 do perm1.[i] <- perm1.[i+1] done;
perm1.[r] <- t;
count.[r] <- count.[r] - 1;
if count.[r] > 0 then go <- false
else r <- r + 1;
end
done;
nperm <- nperm + 1;
done;
(maxflips, checksum);
end
let _ =
let n = try int((System.Environment.GetCommandLineArgs()).[1]) with _ -> 7
let (maxflips, checksum) = fannkuch n
Printf.printf "%d\nPfannkuchen(%d) = %d\n" checksum n maxflips
notes, command-line, and program output
NOTES:
64-bit Ubuntu quad core
2.0.2 a04b4bf512
"System.GC.Server": true
Thu, 09 Nov 2017 00:08:21 GMT
MAKE:
cp fannkuchredux.fsharpcore Program.fs
cp Include/fsharpcore/tmp.fsproj .
cp Include/fsharpcore/runtimeconfig.template.json .
mkdir obj
cp Include/fsharpcore/project.assets.json ./obj
cp Include/fsharpcore/tmp.fsproj.nuget.g.props ./obj
cp Include/fsharpcore/tmp.fsproj.nuget.g.targets ./obj
/usr/bin/dotnet build -c Release --no-restore
Microsoft (R) Build Engine version 15.4.8.50001 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
tmp -> /home/dunham/benchmarksgame_quadcore/fannkuchredux/tmp/bin/Release/netcoreapp2.0/tmp.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:08.92
9.47s to complete and log all make actions
COMMAND LINE:
/usr/bin/dotnet ./bin/Release/netcoreapp2.0/tmp.dll 12
PROGRAM OUTPUT:
3968050
Pfannkuchen(12) = 65