mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* benchmark/bm_loop_whileloop.rb: ditto. * benchmark/bm_loop_whileloop2.rb: ditto. * benchmark/bm_app_uri.rb: added. * benchmark/bm_vm1_ivar_set.rb: ditto. * benchmark/bm_so_binary_trees.rb: added from Computer Language Benchmarks Game (http://shootout.alioth.debian.org/). * benchmark/bm_so_fannkuch.rb: ditto. * benchmark/bm_so_mandelbrot.rb: ditto. * benchmark/bm_so_meteor_contest.rb: ditto. * benchmark/bm_so_nbody.rb: ditto. * benchmark/bm_so_nsieve.rb: ditto. * benchmark/bm_so_nsieve_bits.rb: ditto. * benchmark/bm_so_partial_sums.rb: ditto. * benchmark/bm_so_pidigits.rb: ditto. * benchmark/bm_so_spectralnorm.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			974 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			974 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# The Computer Language Shootout
 | 
						|
# http://shootout.alioth.debian.org/
 | 
						|
# Contributed by Sokolov Yura
 | 
						|
# Modified by Ryan Williams
 | 
						|
 | 
						|
def fannkuch(n)
 | 
						|
   maxFlips, m, r, check = 0, n-1, n, 0
 | 
						|
   count = (1..n).to_a
 | 
						|
   perm = (1..n).to_a
 | 
						|
 | 
						|
   while true
 | 
						|
      if check < 30
 | 
						|
         puts "#{perm}"
 | 
						|
         check += 1
 | 
						|
      end
 | 
						|
 | 
						|
      while r != 1
 | 
						|
         count[r-1] = r
 | 
						|
         r -= 1
 | 
						|
      end
 | 
						|
 | 
						|
      if perm[0] != 1 and perm[m] != n
 | 
						|
         perml = perm.clone #.dup
 | 
						|
         flips = 0
 | 
						|
         while (k = perml.first ) != 1
 | 
						|
            perml = perml.slice!(0, k).reverse + perml
 | 
						|
            flips += 1
 | 
						|
         end
 | 
						|
         maxFlips = flips if flips > maxFlips
 | 
						|
      end
 | 
						|
      while true
 | 
						|
         if r==n then return maxFlips end
 | 
						|
         perm.insert r,perm.shift
 | 
						|
         break if (count[r] -= 1) > 0
 | 
						|
         r += 1
 | 
						|
      end
 | 
						|
   end
 | 
						|
end
 | 
						|
 | 
						|
def puts *args
 | 
						|
end
 | 
						|
 | 
						|
N = 10 # (ARGV[0] || 1).to_i
 | 
						|
puts "Pfannkuchen(#{N}) = #{fannkuch(N)}"
 | 
						|
 |