The Computer Language
24.11 Benchmarks Game

fannkuch-redux Matz's Ruby #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 
#

def fannkuch(n)
   perm1 = Array.new(n) {|index| index}       
   perm = Array.new(perm1)
   count = Array.new(perm1)       
   f = flips = nperm = checksum = j = k = r = 0          
  
   r = n
   while r > 0 do 
      i = 0  
      while (r != 1) do count[r-1] = r; r -= 1 end  
      while (i < n) do perm[i] = perm1[i]; i += 1 end  
        
      # Count flips and update max and checksum
      f = 0
      k = perm[0]  
      while k != 0 do
         i = 0  
         while 2*i < k do         
            t = perm[i]; perm[i] = perm[k-i]; perm[k-i] = t  
            i += 1           
         end
         k = perm[0]
         f += 1   
      end
      if f > flips then flips = f end         
      if (nperm & 0x1) == 0 then checksum += f else checksum -= f end
   
      # Use incremental change to generate another permutation   
      more = true
      while more do  
         if r == n then  
            puts checksum           
            return flips 
         end
         p0 = perm1[0]
         i = 0
         while i < r do
            j = i + 1
            perm1[i] = perm1[j]
            i = j            
         end
         perm1[r] = p0 
         
         count[r] -= 1        
         if count[r] > 0 then more = false else r += 1 end
      end
      nperm += 1
   end   
   return flips      
end

n = (ARGV[0] || 7).to_i   
puts "Pfannkuchen(#{n}) = #{fannkuch(n)}"

    

notes, command-line, and program output

NOTES:
64-bit Ubuntu quad core
ruby 1.8.7 
(2014-01-28
patchlevel 376)
[x86_64-linux]



 Thu, 07 Nov 2024 02:05:17 GMT

COMMAND LINE:
 /usr/share/rvm/rubies/ruby-1.8.7-head/bin/ruby  fannkuchredux.mri-8.mri 12

TIMED OUT after 14400s


PROGRAM OUTPUT: