Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def myStrategy(myscore, theirscore, last):
- #Expected sum of n rolls of [0,1,2,3,4,5] = (5/2)n
- leftToWin = 100 - myscore
- leftToLose = 100 - theirscore
- #returns the number of rolls s.t. desiredSum+myscore=desiredscore
- def returnRollsForDesiredSum(desiredSum):
- return math.floor(desiredSum*(2/5))
- def chooseifLose(n):
- if theirscore>=myscore:
- return n+1
- else:
- return n
- #Calculates the output when last=True
- def lastOutput(myscore,theirscore):
- if myscore%10 in [8,3]:
- #solves for n in 88-5n=myscore
- n = (88-myscore)/5
- return (2*n)+4 if theirscore<=99 else (2*n)+5
- elif myscore%10 in [2,7]:
- #solves for n in 92-5n=myscore
- n = (92-myscore)/5
- return (2*n)+2 if theirscore<=97 else (2*n)+3
- elif myscore%10 in [0,5]:
- #solves for n given the largest # for myscore is 90
- n = 18-(myscore/5)
- return (2*n)+3 if theirscore<=98 else (2*n)+4
- elif myscore%10 in [1,6]:
- # solves for n in 91-5n = myscore
- n = (91-myscore)/5
- return (2*n)+3
- elif myscore%10 in [4,9]:
- # solves for n in 89-5n = myscore
- n = (89-myscore)/5
- return (2*n)+4
- #contains dict of output values when last=True
- lastCases = {'rest':lastOutput(myscore,theirscore),
- 93: 2 if theirscore<=98 else 3,
- 94: 2,
- 95: 2,
- 96: 1,
- 97: 1 if theirscore>=myscore else 0,
- 98: 1 if theirscore>myscore else 0,
- 99: 1 if theirscore>myscore else 0,
- 100: 0}
- if last:
- if myscore>theirscore:
- return 0
- else:
- return lastCases[myscore] if myscore>=93 else lastCases['rest']
- elif myscore==93:
- return chooseifLose(1)
- elif theirscore > myscore and myscore>=90:
- if not last: #condition is redundant but it is just for reminder purposes
- if myscore<=93:
- return 2
- else:
- return 1
- #Dictionary containing outputs for different score values
- nonSpecialCases = {range(0,49+1): returnRollsForDesiredSum(leftToWin-5)-5,
- range(50,51+1): 14 if myscore==51 else chooseifLose(14),
- range(52,54+1): 13 if myscore==54 else chooseifLose(13),
- range(55,58+1): 12 if myscore==58 else chooseifLose(12),
- range(59,61+1): 11 if myscore==61 else chooseifLose(11),
- range(62,65+1): 10 if myscore>=64 else chooseifLose(10),
- range(66,68+1): 9 if myscore==68 else chooseifLose(9),
- range(69,70+1): 8 if myscore==70 else chooseifLose(8),
- range(71,73+1): 7 if myscore==73 else chooseifLose(7),
- range(74,77+1): 6 if myscore>=76 else chooseifLose(6),
- range(78,81+1): 5 if myscore>=80 else chooseifLose(5),
- range(82,84+1): 4 if myscore>=83 else chooseifLose(4),
- range(85,88+1): 3 if myscore>=87 else chooseifLose(3),
- range(89, 92+1): 2 if myscore>=90 else chooseifLose(2),
- range(93,96+1): 1,
- range(97,100+1): 0}
- for i in nonSpecialCases:
- if myscore in i:
- return nonSpecialCases[i]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement