Files
Dawson Matthews 4cac260822 Initial commit
2025-12-02 10:56:31 -07:00

58 lines
1.2 KiB
Python

import random
import time
import sys
DEBUG=False
def roll_until_n_success(n, p_success=0.5):
successes = 0
tries = 0
faces = [0, 1]
weights = [p_success, (1 - p_success)]
while successes < n:
if (random.choices(faces, weights, k=1)[0] == 0):
successes += 1
tries += 1
return tries
def simulate(num_trials, n, p_success=0.5):
sum_trials = 0
sys.stdout.write(f"Trials\t\t\tAverage Rolls\n")
for i in range(num_trials):
sum_trials += roll_until_n_success(n, p_success)
if DEBUG: print(f"[DEBUG] sum_trials: {sum_trials}")
ave_trials = sum_trials / (i+1)
ave_trials_percent = ave_trials
# Clear line and move cursor to the beginning
sys.stdout.write('\033[2K\033[0G')
sys.stdout.write(f"({i+1}/{num_trials})\t{ave_trials_percent}%")
sys.stdout.flush()
sys.stdout.write("\n")
def main():
program_name = sys.argv[0]
if len(sys.argv) != 2:
print(f"Usage: {program_name} <number of trials>")
return 1
num_trials = int(sys.argv[1])
random.seed()
simulate(num_trials, 7, 0.5)
if __name__ == "__main__":
main()