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. (Pretty boring, I know, but hey, I was bored, interested in learning, and
didn't feel like reading any more of The Stand right now.)
Without any further ado, here is the Ruby program I wrote to simulate this
problem:
# my 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 the 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). Finally, here is some typical 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 why they call it a simulation. ;)