Guest User

Untitled

a guest
May 25th, 2023
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. def factorial(n):
  2. if n == 0:
  3. return 1
  4. else:
  5. return n * factorial(n - 1)
  6.  
  7. def combination(n, r):
  8. return factorial(n) / (factorial(r) * factorial(n - r))
  9.  
  10. def calculate_win_probability(wr, wins, losses, print_result=True):
  11. p = wr / 100.0 # probability of winning a game
  12. q = 1 - p # probability of losing a game
  13.  
  14. prob = 0
  15. for l in range(losses):
  16. total_games = wins + l
  17. # probability of getting 'wins' successes in 'total_games' trials
  18. partial_prob = combination(total_games - 1, wins - 1) * (p ** wins) * (q ** l)
  19. prob += partial_prob
  20.  
  21. if print_result:
  22. print(f"The chance of getting {wins} wins before {losses} losses with a win rate of {wr}% is {prob * 100:.2f}%")
  23. return prob
  24.  
  25. def calculate_average_attempts(wr, wins, losses, print_result=True):
  26. p = calculate_win_probability(wr, wins, losses, print_result=False)
  27. if p == 0:
  28. res = float('inf')
  29. res = 1 / p
  30. if print_result:
  31. print(f"On average, with a win rate of {wr}%, you need to attempt {res:.2f} times to get {wins} wins before {losses} losses.")
  32. return res
  33.  
  34. def print_reddit_table(wins, losses, start, end):
  35. print("| Win Rate | Success Rate | Average Attempts |")
  36. print("|--------------|------------------|------------------|")
  37.  
  38. for wr in range(start, end+1): # Loop over win rates
  39. success_rate = calculate_win_probability(wr, wins, losses, print_result=False) * 100
  40. average_attempts = calculate_average_attempts(wr, wins, losses, print_result=False)
  41.  
  42. print(f"| {wr}% | {success_rate:.2f}% | {average_attempts:.2f} |")
  43.  
  44. wr = 64 # Set the win rate
  45. wins = 12
  46. losses = 3
  47.  
  48. calculate_win_probability(wr, wins, losses)
  49.  
  50. calculate_average_attempts(wr, wins, losses)
  51.  
  52. start = 40
  53. end = 75
  54.  
  55. print_reddit_table(wins, losses, start, end)
Advertisement
Add Comment
Please, Sign In to add comment