आपको एक जल्लाद सॉल्वर लिखना आवश्यक है। इस अंग्रेजी शब्द सूची [1] के विरूद्ध परीक्षण , कुल मिलाकर जो शब्द जीतता है, कुल गलत अनुमानों की संख्या के साथ टाई-ब्रेकर होता है। शब्द सूची के सभी शब्दों का परीक्षण यादृच्छिक क्रम में किया जाएगा।
[१]: यह शब्द सूची यहां से ली गई है , फिर संख्याओं को हटा दिया जाता है, फिर लंबाई १ या गैर-वर्णानुक्रमिक वर्णों वाले शब्दों को हटा दिया जाता है, फिर सबसे अधिक ४० ९ ६ अद्वितीय शब्दों को इस शब्द सूची के रूप में चुना जाता है।
विवरण:
आपका कार्यक्रम गेम प्रोग्राम के साथ इंटरैक्ट करेगा, जो आपको अंडरस्कोर के माध्यम से देगा और सही ढंग से अनुमानित पत्र। आपका कार्यक्रम आपके अनुमानों को रोकने के लिए देगा, और इसे इनपुट से अनुमान लगाना होगा कि क्या पिछला अनुमान सही था या गलत। 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 बार (मेरे द्वारा, जब तक कि निर्देश न हो) लिया जाएगा। और औसतन।
नोट : यदि आप अजगर जैसी भाषाओं का उपयोग करते हैं, तो कृपया प्रत्येक प्रिंट स्टेटमेंट के बाद अपने स्टडआउट को स्पष्ट रूप से फ्लश करें।
खेल कार्यक्रम के रूप में (करने के लिए श्रेय इस प्रकार है 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
गेम को चलाने के लिए एक बाहरी फीफो के बजाय उपयोग करने का सुझाव दिया जा सकता है? इस तरह से कोड अन्य OSes (उदाहरण के लिए, विंडोज पर Cygwin) के लिए काम करेगा। यहां कमांड-लाइन पर दिए गए प्रोग्राम को शुरू करने के game.py
लिए उपयोग subprocess
करने के लिए संशोधित किया गया है : gist.github.com/nneonneo/d173f8888e1ea0c6fe37 । इसका उपयोग करें python game.py <program> [args]
, जैसे python game.py python hangman.py
।