私は学校のための単純なPythonプロジェクトをやっています。 30秒で手紙。ユーザーの回答が本当の単語であるかどうかをテストするには、英語で多くの単語のファイル(おそらくすべてが含まれていない114,000語の単語)を繰り返してテストするだけです。実際には、それは実行するためにスプリット秒を要した。ファイルリストをループし、各単語を1文字の9文字の単語ごとにテストします。
しかし、ランダムな文字のプールに完全な '解決法'(9文字の実数)があるかどうかを調べるために、9文字の単一置換のテストごとに何かを考えることはできませんでした。ファイル内のすべての単語に対してレターワードプールを作成します。問題は、それは本当に非効率的で約7分かかったことです。結局のところ、9があることを考慮して! (階乗)順列であり、 'ランダム'モジュールは以前の順列を除外せず、ファイル内に多くの単語があるとすれば、コンピュータは500億回以上の比較を経なければならない。最後に「幸福」のアナグラムを使った言葉が見つかりませんでした。これは私が試したコードです:
別に、実際にソリューションを生み出すコードから# python 3.5.2
import random
anagram = ['p','s','h','a','i','s','n','p','e'] # anagram of hapiness
with open('wordlist.txt') as in_file:
for line in in_file:
line = line.rstrip()
shuffledList = random.sample(anagram, len(anagram)) # randomise order
shuffledWord = ''.join(shuffledList) # make it a string
if shuffledWord == line:
print("YES") # (never happens)
break
、私は9の元の単語を見つけることができる巧妙なアルゴリズム・ソリューション/スレッディング技術/絶対に何も、いくつかの並べ替えを探しています30秒以内にアナグラムを送ってください。それは本当に遠くに見えるが、私はそれが試してみる価値があると思った。助言がありますか?
: あなたはそのような何かを試すことができます。 OTOH、itertools.permutationsは、反復項目を含むコレクションを置換するときに少しダムです。その状況を適切に処理するには、http://stackoverflow.com/a/31678111/4014959 –