For some reason or another today I was curious about this question: If you flipped a coin ten times, what are the odds that the coin would come up heads ten times, or tails ten times)?

I'm sure there is a way to determine this statistically, but I don’t know how to do that, so, being new to Ruby, I wrote a little Ruby simulation program — essentially a Monte Carlo simulation of the problem — to find the answer.

## Example Ruby “Monte Carlo simulation” program

Without any further ado, here is the example Ruby program I wrote to simulate this problem:

# my ruby random method, with an intentionally short name def r rand(2) end # if all elements in the array "a" are the same, return true def all_equal a a[0] == a[1] and a[0] == a[2] and a[0] == a[3] and a[0] == a[4] and a[0] == a[5] and a[0] == a[6] and a[0] == a[7] and a[0] == a[8] and a[0] == a[9] end # out of the array, determine the number of elements that match "num" def get_count arr, num count = 0 arr.each do |a| if a == num then count = count + 1 end end return count end #------# # main # #------# num_all_equal = 0.0 num_heads = 0 num_tails = 0 tot_count = 250000 tot_count.times { flips = [r,r,r,r,r,r,r,r,r,r] #puts flips.inspect if all_equal(flips) then num_all_equal = num_all_equal + 1 end num_heads = num_heads + get_count(flips, 0) num_tails = num_tails + get_count(flips, 1) } pct_all_equal = num_all_equal/tot_count*100.0 puts "num where all were the same: #{num_all_equal}" puts "all sides were equal #{pct_all_equal}% of the time" puts "#heads: #{num_heads}" puts "#tails: #{num_tails}"

It’s worth noting that my Ruby `get_count`

method and the last few lines of the program are not necessary. I just put them in there to be sure I was getting a relatively even spread between heads (the number 0) and tails (the number 1) in my Monte Carlo simulation.

Finally, here is some example output from the program:

num where all were the same: 513.0 all sides were equal 0.2052% of the time #heads: 1249227 #tails: 1250773

Of course the actual numbers change a little with each simulation, but that’s an example of the output I get with the simulation.