パズルが 1 つあり、Python を使用して解決したいと考えています。
パズル:
ある商人は、自分の店で使用していた 40 kg の重りを持っています。一度、手から落ちて四つに割れた。しかし驚くべきことに、今ではこの 4 つのピースの組み合わせで 1 kg から 40 kg までの任意の重量を量ることができます。
そこで質問なのですが、この 4 ピースの重さはどれくらいですか?
これをPythonで解決したかったのです。
パズルから得た唯一の制約は、4 つのピースの合計が 40 であることです。これにより、合計が 40 である 4 つの値のすべてのセットをフィルター処理できます。
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) で、数年前に見つけました。回答を確認して確認しました。
編集:現在、fraxel
の答えはで完璧に機能しtime = 0.16 ms
ます。より良い、より速いアプローチはいつでも大歓迎です。
よろしく
アーク