This week's quiz was extremely simple. My solution mostly-worked on the first try.



DES_NUMBER = 5
DICE_SIDES = 6

verbose = ARGV.include? "-v"
sample = ARGV.include? "-s"

dice = ARGV[-2].to_i
min_des = ARGV[-1].to_i

pos_outcomes = DICE_SIDES ** dice
des_outcomes = 0

max_digits = pos_outcomes.to_s.size

state = [1]*dice

1.upto(pos_outcomes) do |i|
  des_outcomes += 1 if state.select{|x|1==x}.size >= min_des
  puts "%#{max_digits}d    %s" % [i, state.inspect] if
    verbose or sample && i % 50000 == 1
  state[0] += 1
  break if i == pos_outcomes
  state.each_with_index do |n, idx|
    if n > DICE_SIDES
      state[idx] = 1
      state[idx+1] += 1
    end
  end
end

print "\n\n"
puts "Number of desirable outcomes is #{des_outcomes}"
puts "Number of possible outcomes is #{pos_outcomes}\n"
puts "Probability is #{des_outcomes.to_f/pos_outcomes}"



       
____________________________________________________________________________________
Building a website is a piece of cake. Yahoo! Small Business gives you all the tools to get online.
http://smallbusiness.yahoo.com/webhosting