#!/usr/bin/env python import random a_skill = 10.2 b_skill = 10 c_skill = 9.8 games_to_win_match = 3 num_of_simulations = 10000000 def single_game(am, bm): a = random.random() * am b = random.random() * bm if a > b: return 1 return 0 def match(num_games_to_win, am, bm): num_a = 0 num_b = 0 while (num_a < num_games_to_win) and (num_b < num_games_to_win): result = single_game(am, bm) num_a += result num_b += (1 - result) return (num_a, num_b) def tourney(num_games_to_win, am, bm, cm): a_sdiff = 0 b_sdiff = 0 c_sdiff = 0 a_series_won = 0 b_series_won = 0 c_series_won = 0 result = match(3, am, bm) a_sdiff += max(result[0] - result[1], 0) b_sdiff += max(result[1] - result[0], 0) a_series_won += (result[0] > result[1]) b_series_won += (result[0] < result[1]) result = match(3, bm, cm) b_sdiff += max(result[0] - result[1], 0) c_sdiff += max(result[1] - result[0], 0) b_series_won += (result[0] > result[1]) c_series_won += (result[0] < result[1]) result = match(3, cm, am) c_sdiff += max(result[0] - result[1], 0) a_sdiff += max(result[1] - result[0], 0) c_series_won += (result[0] > result[1]) a_series_won += (result[0] < result[1]) #print (a_sdiff, b_sdiff, c_sdiff, a_series_won, b_series_won, c_series_won) return (a_sdiff, b_sdiff, c_sdiff, a_series_won, b_series_won, c_series_won) def get_places(list_of_results): evg_place = [1, 1, 1] seraf_place = [1, 1, 1] (a_sdiff, b_sdiff, c_sdiff, a_series_won, b_series_won, c_series_won) = list_of_results if (a_series_won < b_series_won) or ((a_series_won == b_series_won) and (a_sdiff <= b_sdiff)): evg_place[0] += 1 else: evg_place[1] += 1 if (b_series_won < c_series_won) or ((b_series_won == c_series_won) and (b_sdiff <= c_sdiff)): evg_place[1] += 1 else: evg_place[2] += 1 if (a_series_won < c_series_won) or ((a_series_won == c_series_won) and (a_sdiff <= c_sdiff)): evg_place[0] += 1 else: evg_place[2] += 1 if (a_sdiff < b_sdiff) or ((a_series_won <= b_series_won) and (a_sdiff == b_sdiff)): seraf_place[0] += 1 else: seraf_place[1] += 1 if (b_sdiff < c_sdiff) or ((b_series_won <= c_series_won) and (b_sdiff == c_sdiff)): seraf_place[1] += 1 else: seraf_place[2] += 1 if (a_sdiff < c_sdiff) or ((a_series_won <= c_series_won) and (a_sdiff == c_sdiff)): seraf_place[0] += 1 else: seraf_place[2] += 1 #simple check #if (seraf_place[0] != evg_place[0] or seraf_place[1] != evg_place[1]): # print (a_sdiff, b_sdiff, c_sdiff, a_series_won, b_series_won, c_series_won) # print seraf_place # print evg_place #calculate the number of correct results evg_correct = 0 seraf_correct = 0 if (evg_place == [1,2,3]): evg_correct = 1 if (seraf_place == [1,2,3]): seraf_correct = 1 return (evg_correct, seraf_correct) evg_correct = 0 seraf_correct = 0 for i in range(1, num_of_simulations): correct = get_places(tourney(games_to_win_match, a_skill, b_skill, c_skill)) evg_correct += correct[0] seraf_correct += correct[1] print evg_correct, seraf_correct