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