Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
re + eval = perfect solution in Clear category for Safe Code by Merzix
import re
def safe_code(equation):
used_numbers = {int(i) for i in equation if i.isdigit()}
possible_numbers = set(range(10)) - used_numbers
pattern = re.compile(r'(?P-?[#\d]+)(?P[-+*])(?P-?[#\d]+)=(?P-?[#\d]+)')
ans = re.match(pattern, equation)
if ans is None:
raise TypeError('Wrong input')
if any([(i.startswith('#') and len(i)>1) or i.startswith('-#') for i in ans.groups()]):
possible_numbers.discard(0)
for num in possible_numbers:
first, sign, second, answer = map(lambda seq: seq.replace('#', str(num)), ans.groups())
if eval(f'{first}{sign}{second}=={answer}'):
return num
return -1
if __name__ == '__main__':
assert safe_code("#*11=##") == 2
assert safe_code("-5#*-1=5#") == 0
assert safe_code("##*##=302#") == 5
assert safe_code("19--45=5#") == -1
assert safe_code("#*13=#6") == 2 # added
assert safe_code("#*-13=-#6") == 2 # added
assert safe_code("-2+-8=-1#") == 0 # added
assert safe_code("#3#*4#=34639") == 7 # added
Sept. 15, 2018