# Re: Probable Iterations (#141)

**URL:** <https://www.ruby-forum.com/t/re-probable-iterations-141/116243>\
**Category:** Ruby\
**Created:** [October 3, 2007, 7:29pm UTC](https://www.ruby-forum.com/t/re-probable-iterations-141/116243 "2007-10-03T19:29:03Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Urs\_Meyer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/35a633/32.png) [@Urs\_Meyer](https://www.ruby-forum.com/u/Urs_Meyer)\
**Post date:** [October 3, 2007, 7:29pm UTC](https://www.ruby-forum.com/t/re-probable-iterations-141/116243/1 "2007-10-03T19:29:03Z")

</div>

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}”
