Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Effective, no regex solution in Speedy category for Safe Code by Merzix
import string
def safe_code(equation):
used_numbers = set(filter(str.isdigit, equation))
possible_numbers = set(string.digits) - used_numbers
sign = None
eq = [[] for _ in range(3)]
pos = 0
for i in equation:
if i in '*+' or (i == '-' and eq[0] and not sign):
sign = i
pos = 1
elif i.isdigit() or i in '-#':
eq[pos].append(i)
elif i == '=':
pos = 2
else:
raise TypeError('Wrong equation')
for i in eq:
if (i[0] == '#' and len(i) > 1) or (i[0] == '-' and i[1] == '#'):
possible_numbers.discard('0')
break
for num in sorted(possible_numbers):
check = [int(''.join([num if k == '#' else k for k in i])) for i in eq ]
if eval(f'{check[0]}{sign}{check[1]}=={check[2]}'):
return int(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