Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. def myStrategy(myscore, theirscore, last):
  2. #Expected sum of n rolls of [0,1,2,3,4,5] = (5/2)n
  3. leftToWin = 100 - myscore
  4. leftToLose = 100 - theirscore
  5.  
  6. #returns the number of rolls s.t. desiredSum+myscore=desiredscore
  7. def returnRollsForDesiredSum(desiredSum):
  8. return math.floor(desiredSum*(2/5))
  9.  
  10. def chooseifLose(n):
  11. if theirscore>=myscore:
  12. return n+1
  13. else:
  14. return n
  15.  
  16. #Calculates the output when last=True
  17. def lastOutput(myscore,theirscore):
  18. if myscore%10 in [8,3]:
  19. #solves for n in 88-5n=myscore
  20. n = (88-myscore)/5
  21. return (2*n)+4 if theirscore<=99 else (2*n)+5
  22.  
  23. elif myscore%10 in [2,7]:
  24. #solves for n in 92-5n=myscore
  25. n = (92-myscore)/5
  26. return (2*n)+2 if theirscore<=97 else (2*n)+3
  27.  
  28. elif myscore%10 in [0,5]:
  29. #solves for n given the largest # for myscore is 90
  30. n = 18-(myscore/5)
  31. return (2*n)+3 if theirscore<=98 else (2*n)+4
  32.  
  33. elif myscore%10 in [1,6]:
  34. # solves for n in 91-5n = myscore
  35. n = (91-myscore)/5
  36. return (2*n)+3
  37.  
  38. elif myscore%10 in [4,9]:
  39. # solves for n in 89-5n = myscore
  40. n = (89-myscore)/5
  41. return (2*n)+4
  42.  
  43. #contains dict of output values when last=True
  44. lastCases = {'rest':lastOutput(myscore,theirscore),
  45. 93: 2 if theirscore<=98 else 3,
  46. 94: 2,
  47. 95: 2,
  48. 96: 1,
  49. 97: 1 if theirscore>=myscore else 0,
  50. 98: 1 if theirscore>myscore else 0,
  51. 99: 1 if theirscore>myscore else 0,
  52. 100: 0}
  53.  
  54. if last:
  55. if myscore>theirscore:
  56. return 0
  57. else:
  58. return lastCases[myscore] if myscore>=93 else lastCases['rest']
  59.  
  60. elif myscore==93:
  61. return chooseifLose(1)
  62.  
  63. elif theirscore > myscore and myscore>=90:
  64. if not last: #condition is redundant but it is just for reminder purposes
  65. if myscore<=93:
  66. return 2
  67. else:
  68. return 1
  69.  
  70. #Dictionary containing outputs for different score values
  71. nonSpecialCases = {range(0,49+1): returnRollsForDesiredSum(leftToWin-5)-5,
  72. range(50,51+1): 14 if myscore==51 else chooseifLose(14),
  73. range(52,54+1): 13 if myscore==54 else chooseifLose(13),
  74. range(55,58+1): 12 if myscore==58 else chooseifLose(12),
  75. range(59,61+1): 11 if myscore==61 else chooseifLose(11),
  76. range(62,65+1): 10 if myscore>=64 else chooseifLose(10),
  77. range(66,68+1): 9 if myscore==68 else chooseifLose(9),
  78. range(69,70+1): 8 if myscore==70 else chooseifLose(8),
  79. range(71,73+1): 7 if myscore==73 else chooseifLose(7),
  80. range(74,77+1): 6 if myscore>=76 else chooseifLose(6),
  81. range(78,81+1): 5 if myscore>=80 else chooseifLose(5),
  82. range(82,84+1): 4 if myscore>=83 else chooseifLose(4),
  83. range(85,88+1): 3 if myscore>=87 else chooseifLose(3),
  84. range(89, 92+1): 2 if myscore>=90 else chooseifLose(2),
  85. range(93,96+1): 1,
  86. range(97,100+1): 0}
  87.  
  88. for i in nonSpecialCases:
  89. if myscore in i:
  90. return nonSpecialCases[i]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement