operator_list = ["+","-","*","/"]
operator_sort = ["((aeb)fc)gd","(aeb)f(cgd)","(ae(bfc))gd","ae((bfc)gd)","ae(bf(cgd))"]
all = set()
def check(item, option,selected):
if len(selected) == 4:
item = item.replace("a",selected[0])
item = item.replace("b",selected[1])
item = item.replace("c",selected[2])
item = item.replace("d",selected[3])
try:
global all
result = eval(item)
rev = f"{item}=24"
if result == 24 and rev not in all:
all.add(rev)
print(rev)
except Exception:
# 出现0为除数的情况
pass
return
for i,v in enumerate(option):
selected.append(v)
option.remove(v)
check(item,option,selected)
selected.pop()
option.insert(i,v)
def backtrack(options):
for item in operator_sort:
for i in operator_list:
index_e = item.index("e")
item = item.replace("e",i)
for j in operator_list:
index_f = item.index("f")
item = item.replace("f", j)
for k in operator_list:
index_g = item.index("g")
item = item.replace("g", k)
option = options
select = []
check(item, option,select)
item_k = list(item)
item_k[index_g] = "g"
item = "".join(item_k)
item_j = list(item)
item_j[index_f] = "f"
item = "".join(item_j)
item_i = list(item)
item_i[index_e] = "e"
item = "".join(item_i)
opt = ["5","5","5","1"]
# opt = ["20","22","3","15"]
backtrack(opt)