У меня есть одна головоломка, и я хочу решить ее с помощью 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 ), который я нашел несколько лет назад. Я проверил и подтвердил ответ.
РЕДАКТИРОВАТЬ :В настоящее время ответ fraxel
отлично работает с time = 0.16 ms
. Всегда приветствуется лучший и более быстрый подход.
С уважением
ARK