Application Development and Automation Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
435
I have two children. One is a boy born on a Tuesday. What is the probability I have two boys?

You can read the article with the riddle here: Hype about conditional probability puzzles

The riddle was also mentioned this week on SPON: DE Das Geschwister-Problem

As normal there is a lot of discussion in the article comments about the solution 13/27.

So just proof the solution with a simulation.

  1. Create 1.000.000 families with two children {m,f} 50:50 and born on {sa,su,mo,tu,we,th,fr} 1:7

  2. Count chance, that family has two boys 1/4

  3. Count chance, that family has two boys, if you know that one child is a boy 1/3

  4. Count chance, that family has two boys, if you know that one child is a boy and born on tuesday 13/27


If you program it, it is obvious, that each additional information (one child is a boy, one child is a boy born on tuesday) changes the sample for the probability calculation.
Simple ABAP program

  CONSTANTS:
c_female TYPE i VALUE 0,
c_male TYPE i VALUE 1,
c_saturday TYPE i VALUE 0,
c_sunday TYPE i VALUE 1,
c_monday TYPE i VALUE 2,
c_tuesday TYPE i VALUE 3,
c_wednesday TYPE i VALUE 4,
c_thursday TYPE i VALUE 5,
c_friday TYPE i VALUE 6.

TYPES:
BEGIN OF ys_family,
child1_gender TYPE i,
child1_day_of_the_week TYPE i,
child2_gender TYPE i,
child2_day_of_the_week TYPE i,
END OF ys_family.

DATA:
lo_rnd TYPE REF TO cl_random_number,
ls_family TYPE ys_family,
lt_family TYPE TABLE OF ys_family,
li_won TYPE i,
li_lost TYPE i,
li_total TYPE i.

CREATE OBJECT lo_rnd.
CALL METHOD lo_rnd->if_random_number~init.

DO 1000000 TIMES.

ls_family-child1_gender = lo_rnd->if_random_number~get_random_int( 1 ).
ls_family-child1_day_of_the_week = lo_rnd->if_random_number~get_random_int( 6 ).
ls_family-child2_gender = lo_rnd->if_random_number~get_random_int( 1 ).
ls_family-child2_day_of_the_week = lo_rnd->if_random_number~get_random_int( 6 ).
APPEND ls_family TO lt_family.

ENDDO.

WRITE: / 'Chance to have two male children'.
CLEAR: li_won, li_lost.
LOOP AT lt_family INTO ls_family.
ADD 1 TO li_total.
IF ls_family-child1_gender EQ c_male AND
ls_family-child2_gender EQ c_male.
ADD 1 TO li_won.
ELSE.
ADD 1 TO li_lost.
ENDIF.
ENDLOOP.
WRITE: / 'total', li_total, 'Won:', li_won, 'Lost:', li_lost.
li_won = li_won * 100 / li_total.
li_lost = li_lost * 100 / li_total.
li_total = li_total * 100 / li_total.
WRITE: / 'total', li_total, '%', 'Won:', li_won, '%', 'Lost:', li_lost, '%'.

ULINE.

WRITE: / 'Chance to have two male children, if you know that first child is male'.
CLEAR: li_won, li_lost.
LOOP AT lt_family INTO ls_family.
IF ls_family-child1_gender EQ c_male OR
ls_family-child2_gender EQ c_male.
ADD 1 TO li_total.
IF ls_family-child1_gender EQ c_male AND
ls_family-child2_gender EQ c_male.

ADD 1 TO li_won.
ELSE.
ADD 1 TO li_lost.
ENDIF.
ENDIF.
ENDLOOP.
WRITE: / 'total', li_total, 'Won:', li_won, 'Lost:', li_lost.
li_won = li_won * 100 / li_total.
li_lost = li_lost * 100 / li_total.
li_total = li_total * 100 / li_total.
WRITE: / 'total', li_total, '%', 'Won:', li_won, '%', 'Lost:', li_lost, '%'.

ULINE.

WRITE: / 'Chance to have two male children, if you know that first child is male and born on tuesday'.
CLEAR: li_won, li_lost.
LOOP AT lt_family INTO ls_family.
IF ls_family-child1_gender EQ c_male OR
ls_family-child2_gender EQ c_male.
IF ( ls_family-child1_gender EQ c_male AND
ls_family-child1_day_of_the_week EQ c_tuesday ) OR
( ls_family-child2_gender EQ c_male AND
ls_family-child2_day_of_the_week EQ c_tuesday ).
ADD 1 TO li_total.
IF ls_family-child1_gender EQ c_male AND
ls_family-child2_gender EQ c_male.
ADD 1 TO li_won.
ELSE.
ADD 1 TO li_lost.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
WRITE: / 'total', li_total, 'Won:', li_won, 'Lost:', li_lost.
li_won = li_won * 100 / li_total.
li_lost = li_lost * 100 / li_total.
li_total = li_total * 100 / li_total.
WRITE: / 'total', li_total, '%', 'Won:', li_won, '%', 'Lost:', li_lost, '%'.

Output example


Chance to have two male children
total 1.000.000 Won: 250.442 Lost: 749.558
total 100 % Won: 25 % Lost: 75 %

Chance to have two male children, if you know that first child is male
total 750.485 Won: 250.442 Lost: 499.943
total 100 % Won: 33 % Lost: 67 %

Chance to have two male children, if you know that first child is male and born on Tuesday
total 138.231 Won: 66.430 Lost: 71.701
total 100 % Won: 48 % Lost: 52 %

3 Comments
Labels in this area