У меня есть одна головоломка, и я хочу ее решить, используя Python.
Головоломка:
Торговец имеет вес 40 кг, который он использовал в своем магазине. Однажды он упал из его рук и был разбит на 4 части. Но удивительно, теперь он может весить любой вес от 1 кг до 40 кг при сочетании эти 4 штуки.
Итак, вопрос в том, что такое веса этих 4 штук?
Теперь я решил решить эту проблему на Python.
Единственное ограничение, которое я получил от головоломки, состоит в том, что сумма из 4 штук равна 40. При этом я мог бы фильтровать весь набор из 4 значений, сумма которых равна 40.
import itertools as it
weight = 40
full = range(1,41)
comb = [x for x in it.combinations(full,4) if sum(x)==40]
length of comb = 297
Теперь мне нужно проверить каждый набор значений в comb
и попробовать все комбинации операций.
Например, если (a,b,c,d)
- это первый набор значений в comb
, мне нужно проверить a,b,c,d,a+b,a-b, .................a+b+c-d,a-b+c+d........
и т.д.
Я много пробовал, но на этом этапе я застрял, то есть как проверить все эти комбинации вычислений на каждый набор из 4 значений.
Вопрос:
1) Думаю, мне нужно получить список всех возможных комбинаций [a,b,c,d] and [+,-]
.
2) У кого-нибудь есть лучшая идея и расскажите мне, как идти отсюда?
Кроме того, я хочу сделать это полностью без помощи каких-либо внешних библиотек, нужно использовать только стандартные библиотеки python.
ИЗМЕНИТЬ: Извините за позднюю информацию. Его ответ (1,3,9,27), который я нашел несколько лет назад. Я проверил и проверил ответ.
EDIT: В настоящее время ответ fraxel
отлично работает с time = 0.16 ms
. Всегда приветствуется лучший и быстрый подход.
Привет
КОВЧЕГ