import collections, itertools, re
expr = 'd4 + (d6 > 2)'
variables = set(re.findall(r'd(\d+)', expr))
cnt = collections.defaultdict(int)
total = 0
for values in itertools.product(*[range(1, int(bound) + 1) for bound in variables]):
total += 1
tmp = expr
for name, value in zip(variables, values):
tmp = re.sub(r'd' + name, str(value), tmp)
cnt[eval(tmp)] += 1
for value in sorted(cnt):
print (f'{value} {100 * cnt[value]/total:.2f}')
aW1wb3J0IGNvbGxlY3Rpb25zLCBpdGVydG9vbHMsIHJlCgpleHByID0gJ2Q0ICsgKGQ2ID4gMiknCnZhcmlhYmxlcyA9IHNldChyZS5maW5kYWxsKHInZChcZCspJywgZXhwcikpCgpjbnQgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChpbnQpCnRvdGFsID0gMApmb3IgdmFsdWVzIGluIGl0ZXJ0b29scy5wcm9kdWN0KCpbcmFuZ2UoMSwgaW50KGJvdW5kKSArIDEpIGZvciBib3VuZCBpbiB2YXJpYWJsZXNdKToKICAgIHRvdGFsICs9IDEKICAgIHRtcCA9IGV4cHIKICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6aXAodmFyaWFibGVzLCB2YWx1ZXMpOgogICAgICAgIHRtcCA9IHJlLnN1YihyJ2QnICsgbmFtZSwgc3RyKHZhbHVlKSwgdG1wKQogICAgY250W2V2YWwodG1wKV0gKz0gMQoKZm9yIHZhbHVlIGluIHNvcnRlZChjbnQpOgogICAgcHJpbnQgKGYne3ZhbHVlfSB7MTAwICogY250W3ZhbHVlXS90b3RhbDouMmZ9Jyk=