76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
# task: Счастливый билет
|
||
# Дано шестизначное число и число N. Между цифрами можно вставлять +, -, ничего.
|
||
# Нужно вывести все выражения, равные N, либо сообщение об отсутствии решений.
|
||
|
||
import itertools
|
||
|
||
|
||
def generate_expressions(digits):
|
||
ops = ["+", "-", ""]
|
||
for comb in itertools.product(ops, repeat=5):
|
||
expr = digits[0]
|
||
for i in range(5):
|
||
expr += comb[i] + digits[i + 1]
|
||
yield expr
|
||
|
||
|
||
def safe_eval(expr):
|
||
try:
|
||
return eval(expr)
|
||
except:
|
||
return None
|
||
|
||
|
||
def solve(ticket, target):
|
||
results = []
|
||
digits = list(ticket)
|
||
for expr in generate_expressions(digits):
|
||
val = safe_eval(expr)
|
||
if val == target:
|
||
results.append(f"{expr}={target}")
|
||
return results
|
||
|
||
|
||
def is_valid_ticket(ticket):
|
||
return ticket.isdigit() and len(ticket) == 6 and int(ticket) > 0
|
||
|
||
|
||
def is_valid_target(target):
|
||
return target.isdigit() and 0 < int(target) < 10**9
|
||
|
||
|
||
while True:
|
||
print("\nВыберите действие:")
|
||
print("1 - Ввести данные")
|
||
print("2 - Выход")
|
||
|
||
choice = input("Ваш выбор: ").strip()
|
||
|
||
if choice == "2":
|
||
print("Выход из программы.")
|
||
break
|
||
elif choice == "1":
|
||
ticket = input("Введите шестизначный номер билета: ").strip()
|
||
target = input("Введите число N (0 < N < 1e9): ").strip()
|
||
|
||
if not is_valid_ticket(ticket):
|
||
print("Ошибка: билет должен быть шестизначным натуральным числом.")
|
||
continue
|
||
|
||
if not is_valid_target(target):
|
||
print("Ошибка: N должно быть натуральным числом (0 < N < 1e9).")
|
||
continue
|
||
|
||
target = int(target)
|
||
solutions = solve(ticket, target)
|
||
|
||
if solutions:
|
||
print("\nНайденные решения:")
|
||
for s in solutions:
|
||
print(s)
|
||
else:
|
||
print("Решение не существует.")
|
||
|
||
else:
|
||
print("Некорректный выбор. Попробуйте снова.")
|