ABC79 C - Train Ticket が解けた




op は 2 種類しかないうえに、
op は 3 つしかない。2^3 だから全探索で余裕だ

TrainTicket.py
ABCD = input()
lisST = list(ABCD)
lisINT = list(map(lambda x:int(x),lisST))
OP =["+","-"]
#print(lisST,lisINT)
ans = ""
from itertools import product
for op1,op2,op3 in product(["+","-"],repeat=3):
    #print(op1,op2,op3)
    if op1 == "+":
        num1=lisINT[0]+lisINT[1]
        ans += lisST[0]+"+"+lisST[1]
    else:
        num1=lisINT[0]-lisINT[1]
        ans += lisST[0]+"-"+lisST[1]

    if op2 == "+":
        num2=num1+lisINT[2]
        ans += "+"+lisST[2]
    else:
        num2=num1-lisINT[2]
        ans += "-"+lisST[2]

    if op3 == "+":
        num3=num2+lisINT[3]
        ans += "+"+lisST[3]
    else:
        num3=num2-lisINT[3]
        ans += "-"+lisST[3]

    if num3 == 7:
        print(ans+"=7")
        break
    else:
        ans = ""

全部列挙は苦痛だったので、
文字をそのまま計算できる eval() を使った。

abc79c.py
S = list(input())

from itertools import product
for op in product(["+","-"],repeat=3):
    op = list(op)
    num = ""
    for i in range(3):
        num += S[i]+op[i]
    num += S[3]
    if eval(num)==7:
        print(num+"=7")
        exit()