Advertisement
Guest User

Untitled

a guest
Feb 26th, 2022
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. import sys
  2. import math
  3. from random import randint,seed
  4. import re
  5.  
  6. # Auto-generated code below aims at helping you parse
  7. # the standard input according to the problem statement.
  8.  
  9. expr = input()
  10. #print(expr)
  11. def multiply(exp):
  12. mult = re.findall(r'(\d*\*\d*)', exp)
  13. #print(mult)
  14. for ii, ex in enumerate(mult):
  15. NewEX = eval(ex)
  16. rep = f'{ex}'
  17. exp = exp.replace(rep, str(NewEX) )
  18. return exp
  19. def Compare(exp):
  20. cp = re.findall(f'(\d*[><]\d*)', exp)
  21. for c in cp:
  22. new = 1 if eval(c) else 0
  23. exp = exp.replace(c, str(new))
  24. return exp
  25.  
  26.  
  27. def ReadExpr(expr):
  28. #print('InReadExpr', expr)
  29. parenthiseMatch = re.findall(r'\((.*?)\)',expr)
  30. if parenthiseMatch:
  31. for i, ex in enumerate(parenthiseMatch):
  32. if '*' in ex:
  33. NewEX = multiply(ex)
  34. elif '+' in ex:
  35. NewEX = add(ex)
  36. elif '-' in ex:
  37. NewEX = substract(ex)
  38. elif '>' in ex or '<' in ex:
  39. NewEX = 1 if eval(ex) else 0
  40. #parenthiseMatch[i] = NewEX
  41. rep = f'({ex})'
  42. expr = expr.replace(rep, str(NewEX) )
  43.  
  44. return expr
  45.  
  46.  
  47.  
  48. def isNumber( check):
  49. try:
  50. int(check)
  51. float(check)
  52. return True
  53. except:
  54. return False
  55. def ReplaceDice(exp):
  56. alldice = re.findall(f'(d\d*)', exp)
  57. #print(alldice)
  58. for dice in alldice:
  59. dd = CheckDice(dice)
  60. #print(dd)
  61. exp = exp.replace(dice, str(dd) , 1 )
  62. #print(exp)
  63. return exp
  64.  
  65. def CheckDice(dice):
  66. seed()
  67. return randint(1, int(dice[1:]))
  68.  
  69. def add(exp: str):
  70. exp = str(exp)
  71. toAdd = re.findall(f'(\d*\+\d*)', exp)
  72. #print('ToAdd', toAdd)
  73. ls =''
  74. for i, elem in enumerate(toAdd):
  75. #print(f'{ls}{elem}')
  76. new = eval(f'{ls}{elem}')
  77. exp = exp.replace(f'{ls}{elem}', str(new))
  78. ls = new
  79. return exp
  80.  
  81. def substract(exp):
  82. exp = str(exp)
  83. toAdd = re.findall(f'(\d*\-\d*)', exp)
  84. #print('sub', toAdd)
  85. ls = ''
  86. for i, elem in enumerate(toAdd):
  87. #print(f'{ls}{elem}')
  88. new = eval(f'{ls}{elem}')
  89. #print('substrac', new)
  90. exp = exp.replace(f'{ls}{elem}', str(new))
  91. ls = new
  92. return exp
  93.  
  94.  
  95. distribution = {}
  96. Sample = 10000
  97. for a in range(Sample):
  98. expr1 = ReplaceDice(expr)
  99. #print('replaceDice',expr1, file=sys.stderr, flush=True)
  100. expr1 = ReadExpr(expr1)
  101. expr1 = multiply(expr1)
  102. expr1 = add(expr1)
  103. expr1 = substract(expr1)
  104. expr1 = Compare(expr1)
  105.  
  106. if expr1 in distribution:
  107. distribution[expr1] += 1
  108. else:
  109. distribution[expr1] = 1
  110. Outcom = list(distribution.keys())
  111. Outcom.sort()
  112.  
  113. for k in Outcom:
  114. print(k, '{:.2f}'.format( round( (distribution[k]/ Sample) *10000 )/100 ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement