From: Urs Meyer Date: 2007-10-04T02:28:09+09:00 Subject: Re: [QUIZ] Probable Iterations (#141) my first contribution... nothing spectacular. /urs #!/usr/bin/ruby # # 141 probable iterations require 'optparse' def generate(n, m, &blk) if n == 0 yield [] else 1.upto(m) { |i| generate(n-1, m) { |result| yield result + [i] } } end end options = {} OptionParser.new do |opts| opts.on("-v", "--verbose", "verbose") { |v| options[:verbose] = v } opts.on("-s", "--samples", "show samples") { |v| options[:samples] = v } end.parse! if ARGV.length != 2 STDERR.puts "usage: #{$0} [-s|-v] n k" exit end n = ARGV[0].to_i k = ARGV[1].to_i possible = desired = 0 # generate all possible solutions of throwing n dice generate(n, 6) { |soln| possible += 1 # selection criteria: at least k fives found = soln.select{ |i| i==5 }.size >= k desired += 1 if found puts "%10d" % possible + " " + soln.inspect + (found ? " <==" : "") \ if ( options[:verbose] || options[:samples] && possible % 50000 == 1) } puts puts "Number of possible outcomes is #{possible}" puts "Number of desired outcomes is #{desired}" puts puts "Probability is #{desired.to_f/possible}" -- GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail