News for hackers. Stuff that matters.
Re:The question is wrong by nostrademons on Sunday January 04, 2009 @12:05AM (#419014)
I thought it might be instructive to implement both algorithms side-by-side in the same loop:

    import random

    jeff_stats = { 'boy_and_girl': 0, 'two_girls': 0 }
    paul_stats = { 'boy_and_girl': 0, 'other': 0 }

    for i in xrange(100000):
        children = [random.randint(0, 1), random.randint(0, 1)]

        # Jeff's algorithm
        if children[0] or children[1]:
            print 'I have a girl'
            if children[0] and children[1]:
                jeff_stats['two_girls'] += 1
            else:
                jeff_stats['boy_and_girl'] += 1
        else:
            print "Oops, I'm a liar - I have no girls, so don't count me"

        # Paul's algorithm
        print 'I have a ' + ('girl' if children[0] else 'boy')
        if children[0] != children[1]:
            paul_stats['boy_and_girl'] += 1
        else:
            paul_stats['other'] += 1

    print "Jeff stats: " + str(jeff_stats)
    print "Paul stats: " + str(paul_stats)
Output (ignoring the actual printouts for each person):

    Jeff stats: {'boy_and_girl': 50027, 'two_girls': 24949}
    Paul stats: {'boy_and_girl': 50027, 'other': 49973}
I liked tromino's explanation best: it's really an ambiguity in the English language. Under your 2nd algorithm, 1/4 of parents can't truthfully announce "I have a girl" - but in ordinary conversation, this doesn't matter, because they'd just truthfully say "I have a boy" and we don't make a distinction. It's only when we explicitly filter out parents who don't have a boy that we change the probabilities.

There are no comments on this comment yet.