## Problem 15 of Monte Carlo solutions to Fifty Challenging Problems...

(This is another part of the Fifty Problems series, a set of example applications of Monte Carlo methods. In each post, I present source code which answers a probabilistic question using simulated models of the underlying system.)

Problem 15: 8 boys and 7 girls are seated at random in a row of 15 seats. On the average, how many pairs of adjacent seats are taken by cootie-transmitting couples? (boys next to girls)

#!/usr/bin/env ruby
TRIALS=10000
# The original problem is heteronormative bachelors
# and models. I don't like that for various reasons,
# and cooties is funnier anyway.
#
# But, my code represents the "bachelors and models in
# marriagable couples" model of the original problem.
#
# We need a pool of bachelors and models:
N_BACHELORS=8
N_MODELS=7
class Pool
def initialize
@b = N_BACHELORS
@m = N_MODELS
end
def draw
left = @b+@m
return nil if left == 0
r = rand(left)
if r > @b
@m -= 1
return "M"
else
@b -= 1
return "B"
end
end
end
n_couples = 0
TRIALS.times do
p = Pool.new
last_d = nil
while d = p.draw()
n_couples += 1 if last_d && last_d != d
last_d = d
end
end
puts "After #{TRIALS}, got #{n_couples}."
puts "So, #{n_couples/TRIALS.to_f} on average"

I've been coding my way through *Fifty Challenging Problems in Statistics with Solutions*. This post is a part of the *Fifty Challenging Problems* series.

*This was brought to you by Josh Myer.* He has other
fun things at his homepage.