Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #import time
- # num1 -- массив чисел, seed -- строка '0' и '1', которые рассматриваются как операторы '-' и '+'
- # функция проверяет равенство выражения из последовательно расставленных чисел и операторов из num1 и seed числу num2
- def che(num1,num2,seed):
- a = num1[0]
- for i,j in zip(num1[1:], seed):
- if j == '1':
- a += i
- else:
- a -= i
- if a == num2:
- return True
- else:
- return False
- # возвращает строку из '0' и '1', которая потом дополняется до нужной длины
- # чтобы было легче итерироваться, решил представить строку из '+' и '-' как двоичное число
- def gena (leng):
- for i in range(2**leng):
- yield bin(i)[2:]
- # ввод чисел
- s1 = list(map(int,input().split(" ")))
- s2 = list(map(int,input().split(" ")))
- #start_time = time.time()
- # базовая проверка на четность, иногда экономит время
- if sum(s2)%2 != s1[1]%2:
- print ("No solution")
- else:
- for i in gena(leng = s1[0]-1):
- seed = '-'*(s1[0]-1 - len(i)) + i # дополним строку до нужной длины
- if che(num1 = s2, num2 = s1[1], seed = seed) == True:
- # формируем ответ
- seed += '='
- m = ''
- for x,y in zip(s2,seed):
- if y == '1':
- m += str(x)+'+'
- elif y == '=':
- m += str(x)+'='
- else:
- m += str(x)+'-'
- m += str(s1[1])
- print(m)
- break
- else:
- print ('No solution')
- #print("--- %s seconds ---" % (time.time() - start_time))
- In [24]: from ast import literal_eval
- In [25]: from itertools import product
- In [26]: from functools import reduce
- In [27]: def validate(numbers, result):
- ...: if sum(numbers) >= result >= reduce(int.__sub__, sorted(numbers)):
- ...: return calculate(numbers, result)
- ...: return 'No solution'
- ...:
- ...:
- In [28]: def calculate(numbers, result):
- ...: pattern = '{}'.join(map(str, numbers))
- ...: for i in product(['+', '-'], repeat=len(numbers)-1):
- ...: expr = pattern.format(*i)
- ...: if literal_eval(expr) == result:
- ...: return expr
- ...: return 'No solution'
- ...:
- ...:
- In [29]: validate([4, 3, 2, 1], -2)
- Out[29]: '4-3-2-1'
- In [30]: validate([4, 3, 2, 1], 10)
- Out[30]: '4+3+2+1'
- In [31]: validate([4, 3, 2, 1], 11)
- Out[31]: 'No solution'
- In [32]: validate([4, 3, 2, 1], -10)
- Out[32]: 'No solution'
Add Comment
Please, Sign In to add comment