Welcome! Share code as fast as possible.

use rand::{Rng, seq::IndexedRandom};

#[derive(Clone, Copy)]
enum Gender {
    Boy,
    Girl,
}

// X has two children
// at least one of them is a girl
// what is the probability of the other being a boy?
// options boy, girl - girl, boy - girl - girl
// boy - boy is impossible
fn main() {
    let mut r = rand::rng();
    let mut boys = 0f64;
    let mut girls = 0f64;
    let options = [Gender::Boy, Gender::Girl];

    let mut count = 0u32;
    loop {
        let mut children = [
            options.choose(&mut r).unwrap(),
            options.choose(&mut r).unwrap(),
        ];
        if r.random_bool(1.0 / 2.0) {
            children[0] = &Gender::Girl;
        } else {
            children[1] = &Gender::Girl;
        }

        match children {
            [Gender::Girl, Gender::Boy] | [Gender::Boy, Gender::Girl] => boys += 1f64,
            _ => girls += 1f64,
        }
        count = count.wrapping_add(1);
        if count % 1000 == 0 {
            println!("{}", girls / (boys + girls));
        }
    }
}