#--- Code in Python 3.6.9 or after:
from __future__ import print_function
import random
num_iteration = 200 #--- Max. number of times to try.
num_games = 9 #--- Max. number of games per one trial.
win_prob = 0.55
gem_start = 20000
gem_cost_premi = 1500
gem_cost_quick = 750
gem_cost_seald = 2000
kind = "quick"
#kind = "premi"
#kind = "seald"
def gem_premi(wins):
res = -gem_cost_premi
res += 50 if (wins==0) else 0
res += 100 if (wins==1) else 0
res += 200 if (wins==2) else 0
res += 1000 if (wins==3) else 0
res += 1400 if (wins==4) else 0
res += 1600 if (wins==5) else 0
res += 1800 if (wins==6) else 0
res += 2200 if (wins==7) else 0
return res
def gem_quick(wins):
res = -gem_cost_quick
res += 50 if (wins==0) else 0
res += 100 if (wins==1) else 0
res += 200 if (wins==2) else 0
res += 300 if (wins==3) else 0
res += 450 if (wins==4) else 0
res += 650 if (wins==5) else 0
res += 850 if (wins==6) else 0
res += 950 if (wins==7) else 0
return res
def gem_seald(wins):
res = -gem_cost_seald
res += 200 if (wins==0) else 0
res += 400 if (wins==1) else 0
res += 600 if (wins==2) else 0
res += 1200 if (wins==3) else 0
res += 1400 if (wins==4) else 0
res += 1600 if (wins==5) else 0
res += 1800 if (wins==6) else 0
res += 2200 if (wins==7) else 0
return res
def do_you_win():
flag = True
if random.random() >= win_prob:#When you lose.
flag = False
return flag
def draft_try():
nwin = 0
nlos = 0
for _ in range(num_games):
if nlos < 3 and nwin < 7:
flag = do_you_win()
nwin += (flag == True)
nlos += (flag == False)
return nwin, nlos
def flight():
count_tot = 0
towin = 0
tolos = 0
gem = gem_start; print("Gems: ", gem)
bailout = False
for _ in range(num_iteration):
#----------------------------------- Start loop <28001>
count_tot += 1
(iwin, ilos) = draft_try()
print("Wins / Loses = ", iwin, " / ", ilos, " in ", count_tot, " th draft.")#--- print results
towin += iwin
tolos += ilos
if kind == "quick":
gem += gem_quick(iwin)
bailout = True if (gem < gem_cost_quick) else False
elif kind == "premi":
gem += gem_premi(iwin)
bailout = True if (gem < gem_cost_premi) else False
elif kind == "seald":
gem += gem_seald(iwin)
bailout = True if (gem < gem_cost_seald) else False
else:
gem = -9999
continue
if bailout == True:
break
#### print("Gems: ", gem)
#----------------------------------- End loop <28001>
print("-------")
print("Gems: ", gem)
print("Drafts: ", count_tot)
print("Total wins :", towin)
print("Total loses :", tolos)
return count_tot, towin, tolos
#----------------------------------------------------- MAIN PART
itry = 0
runs = 0
nwin = 0
nlos = 0
for _ in range(1000):
itry += 1
(i1, i2, i3) = flight()
runs += i1
nwin += i2
nlos += i3
print("##########################################")
print("- kind =", kind, "draft")
print("- winning prob. =", win_prob)
print("- flights =", itry)
print("- actual wins =", nwin)
print("- actual loses =", nlos)
print("- actual winning prob. =", nwin/(nwin+nlos))
print("- drafts / flights =", runs/itry)