# The tuesday boy problem
# http://s...content-available-to-author-only...s.com/evolutionblog/2011/11/08/the-tuesday-birthday-problem/
# http://e...content-available-to-author-only...a.org/wiki/Boy_or_Girl_paradox
# Sounds complicated and counter-intuitive, right?
# Python to the rescue!
# I have changed the wording in the problem to be less ambiguous:
# "If you ask someone whom you know has two children, whether they have
# at least one boy born on a tuesday, what is the probability that
# both children are boys?"
import itertools
import fractions
GENDERS = 'boy girl'.split()
DAYS = 'mon tue wed thu fri sat sun'.split()
def has_two_boys((child1, child2)):
#Do you have two boys?
return child1[0] == 'boy' and child2[0] == 'boy'
def question(child):
#Is this child a boy born on a tuesday?
return child == ('boy', 'tue')
def show_probability(pairs):
nr_boy_pairs = len(filter(has_two_boys, pairs))
print '%d pairs, where %d are boy pairs' % (len(pairs), nr_boy_pairs)
print 'gives', fractions.Fraction(nr_boy_pairs, len(pairs))
CHILD_TYPES = list(itertools.product(GENDERS, DAYS))
#All these pairs are equally common
#(if we pretend that each day and gender is equally likely for each birth):
ALL_CHILD_PAIRS = list(itertools.product(CHILD_TYPES, CHILD_TYPES))
print 'Probability that a person has two boys:'
show_probability(ALL_CHILD_PAIRS)
#Now we ask all parents the question
YES_PARENTS = [pair for pair in ALL_CHILD_PAIRS
#Is any of your children a boy born on a tuesday?
if question(pair[0]) or question(pair[1])]
print 'Probability that a person has two boys, given that they answer yes:'
show_probability(YES_PARENTS)
IyBUaGUgdHVlc2RheSBib3kgcHJvYmxlbQojIGh0dHA6Ly9zLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5zLmNvbS9ldm9sdXRpb25ibG9nLzIwMTEvMTEvMDgvdGhlLXR1ZXNkYXktYmlydGhkYXktcHJvYmxlbS8KIyBodHRwOi8vZS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYS5vcmcvd2lraS9Cb3lfb3JfR2lybF9wYXJhZG94CiMgU291bmRzIGNvbXBsaWNhdGVkIGFuZCBjb3VudGVyLWludHVpdGl2ZSwgcmlnaHQ/CiMgUHl0aG9uIHRvIHRoZSByZXNjdWUhCgojIEkgaGF2ZSBjaGFuZ2VkIHRoZSB3b3JkaW5nIGluIHRoZSBwcm9ibGVtIHRvIGJlIGxlc3MgYW1iaWd1b3VzOgojICJJZiB5b3UgYXNrIHNvbWVvbmUgd2hvbSB5b3Uga25vdyBoYXMgdHdvIGNoaWxkcmVuLCB3aGV0aGVyIHRoZXkgaGF2ZQojICBhdCBsZWFzdCBvbmUgYm95IGJvcm4gb24gYSB0dWVzZGF5LCB3aGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0CiMgIGJvdGggY2hpbGRyZW4gYXJlIGJveXM/IgoKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgZnJhY3Rpb25zCgpHRU5ERVJTID0gJ2JveSBnaXJsJy5zcGxpdCgpCkRBWVMgPSAnbW9uIHR1ZSB3ZWQgdGh1IGZyaSBzYXQgc3VuJy5zcGxpdCgpCgpkZWYgaGFzX3R3b19ib3lzKChjaGlsZDEsIGNoaWxkMikpOgogICAgI0RvIHlvdSBoYXZlIHR3byBib3lzPwogICAgcmV0dXJuIGNoaWxkMVswXSA9PSAnYm95JyBhbmQgY2hpbGQyWzBdID09ICdib3knCgpkZWYgcXVlc3Rpb24oY2hpbGQpOgogICAgI0lzIHRoaXMgY2hpbGQgYSBib3kgYm9ybiBvbiBhIHR1ZXNkYXk/CiAgICByZXR1cm4gY2hpbGQgPT0gKCdib3knLCAndHVlJykKCmRlZiBzaG93X3Byb2JhYmlsaXR5KHBhaXJzKToKICAgIG5yX2JveV9wYWlycyA9IGxlbihmaWx0ZXIoaGFzX3R3b19ib3lzLCBwYWlycykpCiAgICBwcmludCAnJWQgcGFpcnMsIHdoZXJlICVkIGFyZSBib3kgcGFpcnMnICUgKGxlbihwYWlycyksIG5yX2JveV9wYWlycykKICAgIHByaW50ICdnaXZlcycsIGZyYWN0aW9ucy5GcmFjdGlvbihucl9ib3lfcGFpcnMsIGxlbihwYWlycykpCiAgICBwcmludAogICAgCkNISUxEX1RZUEVTID0gbGlzdChpdGVydG9vbHMucHJvZHVjdChHRU5ERVJTLCBEQVlTKSkKI0FsbCB0aGVzZSBwYWlycyBhcmUgZXF1YWxseSBjb21tb24KIyhpZiB3ZSBwcmV0ZW5kIHRoYXQgZWFjaCBkYXkgYW5kIGdlbmRlciBpcyBlcXVhbGx5IGxpa2VseSBmb3IgZWFjaCBiaXJ0aCk6CkFMTF9DSElMRF9QQUlSUyA9IGxpc3QoaXRlcnRvb2xzLnByb2R1Y3QoQ0hJTERfVFlQRVMsIENISUxEX1RZUEVTKSkKCnByaW50ICdQcm9iYWJpbGl0eSB0aGF0IGEgcGVyc29uIGhhcyB0d28gYm95czonCnNob3dfcHJvYmFiaWxpdHkoQUxMX0NISUxEX1BBSVJTKQoKI05vdyB3ZSBhc2sgYWxsIHBhcmVudHMgdGhlIHF1ZXN0aW9uCllFU19QQVJFTlRTID0gW3BhaXIgZm9yIHBhaXIgaW4gQUxMX0NISUxEX1BBSVJTCiAgICAgICAgICAgICAgICNJcyBhbnkgb2YgeW91ciBjaGlsZHJlbiBhIGJveSBib3JuIG9uIGEgdHVlc2RheT8KICAgICAgICAgICAgICAgaWYgcXVlc3Rpb24ocGFpclswXSkgb3IgcXVlc3Rpb24ocGFpclsxXSldCgpwcmludCAnUHJvYmFiaWxpdHkgdGhhdCBhIHBlcnNvbiBoYXMgdHdvIGJveXMsIGdpdmVuIHRoYXQgdGhleSBhbnN3ZXIgeWVzOicKc2hvd19wcm9iYWJpbGl0eShZRVNfUEFSRU5UUykK
Probability that a person has two boys: 196 pairs, where 49 are boy pairs gives 1/4 Probability that a person has two boys, given that they answer yes: 27 pairs, where 13 are boy pairs gives 13/27