Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
a * (b - c).Попробовал найти "в лоб" все несчастливые билеты. Оказалось несложно, компьютер считал где-то 5 секунд. Всего нашлось 874 комбинации.
opindex=["+","*","-","/"]
partemplates=["%s%s%s%s%s","(%s%s%s)%s%s","%s%s(%s%s%s)"]
def build(values,op1,op2,paren):
textvalues=[str(a) for a in values]
result=partemplates[paren] % (textvalues[0],opindex[op1],textvalues[1],opindex[op2],textvalues[2])
return result
tickets=[]
calcs=[]
def all_tickets():
for d1 in range(0,10):
for d2 in range(0,10):
for d3 in range(0,10):
calc_ticket((d1,d2,d3))
def calc_ticket(ticket):
calc=set()
for o1 in range(0,4):
for o2 in range(0,4):
for p in range(0,3):
form=build(ticket,o1,o2,p)
try:
value=int(eval(form))
calc.add(value)
except:
pass
tickets.append(ticket)
calcs.append(calc)
bad_tickets=[]
def find_bad_tickets():
for i1 in range(0,len(calcs)):
for i2 in range(0,len(calcs)):
if calcs[i1].isdisjoint(calcs[i2]):
bad_tickets.append((i1, i2))
all_tickets()
find_bad_tickets()
print(len(bad_tickets))
Занимательная задачка «Несчастливый билет»