Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import math
- from random import randint,seed
- import re
- # Auto-generated code below aims at helping you parse
- # the standard input according to the problem statement.
- expr = input()
- #print(expr)
- def multiply(exp):
- mult = re.findall(r'(\d*\*\d*)', exp)
- #print(mult)
- for ii, ex in enumerate(mult):
- NewEX = eval(ex)
- rep = f'{ex}'
- exp = exp.replace(rep, str(NewEX) )
- return exp
- def Compare(exp):
- cp = re.findall(f'(\d*[><]\d*)', exp)
- for c in cp:
- new = 1 if eval(c) else 0
- exp = exp.replace(c, str(new))
- return exp
- def ReadExpr(expr):
- #print('InReadExpr', expr)
- parenthiseMatch = re.findall(r'\((.*?)\)',expr)
- if parenthiseMatch:
- for i, ex in enumerate(parenthiseMatch):
- if '*' in ex:
- NewEX = multiply(ex)
- elif '+' in ex:
- NewEX = add(ex)
- elif '-' in ex:
- NewEX = substract(ex)
- elif '>' in ex or '<' in ex:
- NewEX = 1 if eval(ex) else 0
- #parenthiseMatch[i] = NewEX
- rep = f'({ex})'
- expr = expr.replace(rep, str(NewEX) )
- return expr
- def isNumber( check):
- try:
- int(check)
- float(check)
- return True
- except:
- return False
- def ReplaceDice(exp):
- alldice = re.findall(f'(d\d*)', exp)
- #print(alldice)
- for dice in alldice:
- dd = CheckDice(dice)
- #print(dd)
- exp = exp.replace(dice, str(dd) , 1 )
- #print(exp)
- return exp
- def CheckDice(dice):
- seed()
- return randint(1, int(dice[1:]))
- def add(exp: str):
- exp = str(exp)
- toAdd = re.findall(f'(\d*\+\d*)', exp)
- #print('ToAdd', toAdd)
- ls =''
- for i, elem in enumerate(toAdd):
- #print(f'{ls}{elem}')
- new = eval(f'{ls}{elem}')
- exp = exp.replace(f'{ls}{elem}', str(new))
- ls = new
- return exp
- def substract(exp):
- exp = str(exp)
- toAdd = re.findall(f'(\d*\-\d*)', exp)
- #print('sub', toAdd)
- ls = ''
- for i, elem in enumerate(toAdd):
- #print(f'{ls}{elem}')
- new = eval(f'{ls}{elem}')
- #print('substrac', new)
- exp = exp.replace(f'{ls}{elem}', str(new))
- ls = new
- return exp
- distribution = {}
- Sample = 10000
- for a in range(Sample):
- expr1 = ReplaceDice(expr)
- #print('replaceDice',expr1, file=sys.stderr, flush=True)
- expr1 = ReadExpr(expr1)
- expr1 = multiply(expr1)
- expr1 = add(expr1)
- expr1 = substract(expr1)
- expr1 = Compare(expr1)
- if expr1 in distribution:
- distribution[expr1] += 1
- else:
- distribution[expr1] = 1
- Outcom = list(distribution.keys())
- Outcom.sort()
- for k in Outcom:
- print(k, '{:.2f}'.format( round( (distribution[k]/ Sample) *10000 )/100 ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement