ハングマンソルバーを作成する必要があります。この英語の単語リスト[1]に対してテストすると、最も多くの単語を解決するソルバーが勝ち、不正確な推測の総数がタイブレーカーになります。単語リスト内のすべての単語は、ランダムな順序でテストされます。
[1]:この単語リストはここから取得され、数字が削除され、長さ1またはアルファベット以外の文字が含まれる単語が削除され、最も頻繁に使用される4096個の一意の単語がこの単語リストとして選択されます。
詳細:
プログラムはゲームプログラムとやり取りします。これにより、標準入力から下線と正しく推測された文字が表示されます。あなたのプログラムはあなたの推測を標準出力に与えます、そしてそれは前の推測が正しかったか間違っているかを入力から推測しなければなりません。6回間違えた後、プログラムは失われます。プログラムは、各ゲームの終了後(勝ち負け後)に次のゲームの準備ができている必要があります。
コードの長さは2048バイト未満でなければならず、プログラムは外部リソース(ローカルストレージまたはインターネットからのワードリストへのアクセスを含むがこれに限定されない)を使用してはなりません。
例:(入力は>
、明確化のためだけにここに先行します-入力に実際には存在しません)
>_______ // 7 underscores
a // Now you wait for input again
>_a___a_
e
>_a___a_ // Implies that your guess is wrong
>_____ // new round, this will be given ONLY IF you already have 6 losses
6回間違えた場合、推測が間違っていることを示唆する最終入力を受け取り、プログラムは新しいラウンドを開始する準備ができている(つまり、別の入力を受け取る)必要があります。
勝ったら、
>_angman
h
>hangman
>_____ // new round
(入力にアンダースコアがないため)勝ったことを知った後、次のラウンドを受け入れる準備ができていなければなりません。
プログラムは、入力を受け取ったときに終了する必要がありますEND
。
プログラムが決定的でない場合(ランダム性、擬似ランダム性、システム時間、周囲温度、私の気分などに依存)、提出時に明示的にそれを明記する必要があり、スコアは10回取得されます(特に指示がない限り)そして平均。
注:Pythonのような言語を使用する場合は、各printステートメントの後にstdoutを明示的にフラッシュしてください。
ゲームプログラムは次のとおりです(nneonneoのクレジット):
import sys, random, subprocess
proc = subprocess.Popen(sys.argv[1:], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
def p(x):
proc.stdin.write(x+'\n')
proc.stdin.flush()
wordlist=[]
f=open('wordlist.txt', 'r')
for i in f:
wordlist.append(i[:-1] if i[-1]=='\n' else i)
# wordlist=[i[:-1] for i in f]
random.shuffle(wordlist)
score=0
totalerr=0
for s in wordlist:
s2=[]
for i in s:
s2.append('_')
err=0
p(''.join(s2))
while err<6 and '_' in s2:
c=proc.stdout.readline().strip()
nomatch=True
for i in range(0, len(s)):
if s[i]==c:
s2[i]=c
nomatch=False
if nomatch:
err+=1
totalerr+=1
p(''.join(s2))
if err<6:
score+=1
p('END')
sys.stderr.write('score is '+str(score)+', totalerr is '+str(totalerr)+'\n')
使用法: python ./game.py [yoursolverprogram]
例: python ./game.py ruby ./solver.rb
これは古いスコアリングプログラムのように機能するはずですが、名前付きパイプに依存しないため、他のプラットフォームでも機能します。古いものに興味がある場合は、改訂履歴を参照してください。
subprocess
ゲームを駆動するために外部fifoの代わりに使用することをお勧めしますか?これにより、コードは他のOS(たとえば、WindowsのCygwin)で機能します。ここますgame.py
使用するように変更subprocess
:コマンドラインで指定されたプログラムを開始するgist.github.com/nneonneo/d173f8888e1ea0c6fe37を。それを使用してpython game.py <program> [args]
、例えばpython game.py python hangman.py
。