Skip to content

Instantly share code, notes, and snippets.

@HugoPeters1024
Created July 6, 2024 10:51
Show Gist options
  • Save HugoPeters1024/067d8bc35338674a379e457213d2cb6e to your computer and use it in GitHub Desktop.
Save HugoPeters1024/067d8bc35338674a379e457213d2cb6e to your computer and use it in GitHub Desktop.
Prisoner simulation
use rand::Rng;
fn main() {
const N: usize = 100000;
let mut rng = rand::thread_rng();
let mut avg_days = 0;
for _ in 0..N {
let mut has_triggered: Vec<bool> = vec![false; 100];
let mut day = 0;
let mut light = false;
let mut master_count = 0;
loop {
day += 1;
let prisoner = rng.gen_range(0..100);
if prisoner == 0 && light {
master_count += 1;
if master_count == 99 {
println!("All prisoners have been in the room (took {} days)", day);
break;
}
} else {
if !light && !has_triggered[prisoner] {
light = true;
has_triggered[prisoner] = true;
}
}
}
avg_days += day;
}
println!("Average days: {}", avg_days / N);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment