У меня есть одна головоломка, и я хочу ее решить с помощью 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.
EDIT: Извините за позднюю информацию. Его ответ (1,3,9,27), который я нашел несколько лет назад. Я проверил и проверил ответ.
EDIT: В настоящее время ответ fraxel
работает с time = 0.16 ms
. Всегда приветствуется лучший и быстрый подход.
С уважением
ARK
Загадки сложнее, чем это; Я не уверен, что вы можете легко скопировать его. Хитрость заключается в том, что для измерения определенных весов ему может потребоваться добавить куски веса по обе стороны от шкалы. Подумайте о более простой версии: сломайте вес 4 кг на 2 части, которые могут измерять любой вес до 4 кг. Ответ - 1 кг и 3 кг. Чтобы измерить 2 кг, вы должны поместить одну из частей по бокам шкалы. –
@JacobM имеет лучший способ: начните с более простой проблемы и посмотрите, не можете ли вы найти шаблон, который позволит вам решить более сложную проблему. Также имейте в виду, что, если вы не уверены, что каждый вес уникален, комбинации не дадут вам то, что вы хотите. (чтобы увидеть это, попробуйте изменить вес на 10 и полный на диапазон (1,10). Легче поиграть с тем, что он делает.) –
@ JacobM ... да .. конечно .. то есть вопрос. Вы можете поместить весы с обеих сторон шкалы, чтобы получить желаемый вес. т.е. я упоминал «отрицательный знак» в вопросе. т.е. 'a-b, a-b + c-d ....'. «минус» означает, что вес вводится в другом масштабе. Думаю, я должен это объяснить. Благодарим за уведомление. –