Решение головоломки в Python

У меня есть одна головоломка, и я хочу решить ее с помощью 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

18
задан Morgoth 22 June 2015 в 16:43
поделиться