The Computer Language
24.11 Benchmarks Game

fannkuch-redux Dart #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 
*/

import 'dart:typed_data';
   
int fannkuch(int n) {
   final perm1 = Int32List(n);   
   for (int i = 0; i < n; i++) perm1[i] = i;      
   final perm = Int32List(n);
   final count = Int32List(n);       
   var f = 0, flips = 0, nperm = 0, checksum = 0;      
   var 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) {          
            int 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) {  
            print( checksum );                
            return flips; 
         }
         int p0 = perm1[0];
         i = 0;
         while (i < r) {
            int 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;      
}
       
void main(List<String> args) {
   final n = (args.length > 0) ? int.parse(args[0]) : 7;
   print("Pfannkuchen($n) = ${fannkuch(n)}");
}
   
    

notes, command-line, and program output

NOTES:
64-bit Ubuntu quad core
Dart SDK version: 3.5.4 (stable)
Wed Oct 16 16:18:51 2024



 Wed, 23 Oct 2024 02:41:17 GMT

MAKE:
/opt/src/dart-sdk/bin/dart analyze 
Analyzing tmp...
No issues found!

/opt/src/dart-sdk/bin/dart compile exe fannkuchredux.dartexe-8.dartexe -o fannkuchredux.dartexe-8.dartexe_run
Generated: /home/dunham/all-benchmarksgame/benchmarksgame_i53330/fannkuchredux/tmp/fannkuchredux.dartexe-8.dartexe_run

4.76s to complete and log all make actions

COMMAND LINE:
 ./fannkuchredux.dartexe-8.dartexe_run 12

PROGRAM OUTPUT:
3968050
Pfannkuchen(12) = 65