commit 4cac260822bd727d4113b2e88f4fb19aa1fc2228 Author: Dawson Matthews Date: Tue Dec 2 10:56:31 2025 -0700 Initial commit diff --git a/main.py b/main.py new file mode 100644 index 0000000..2e112c2 --- /dev/null +++ b/main.py @@ -0,0 +1,58 @@ +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} ") + return 1 + + num_trials = int(sys.argv[1]) + + random.seed() + + simulate(num_trials, 7, 0.5) + + + +if __name__ == "__main__": + main() \ No newline at end of file