행맨 솔버를 작성해야합니다. 이 영어 단어 목록 에 대한 테스트 [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 배 (나에게 지시되지 않은 한) 평균.
참고 : 파이썬과 같은 언어를 사용하는 경우 각 인쇄 문 후에 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
.