আপনার একটি হ্যাঙ্গম্যান সলভার লিখতে হবে। এই ইংরাজির শব্দের তালিকার বিরুদ্ধে পরীক্ষা করা [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
ধরুন আপনি times বার ভুল করছেন, আপনি একটি চূড়ান্ত ইনপুট পাবেন যা বোঝায় যে আপনার অনুমানটি ভুল, এবং আপনার প্রোগ্রামটি অবশ্যই নতুন রাউন্ড শুরু করার জন্য প্রস্তুত থাকতে হবে (অর্থাত্ অন্য একটি ইনপুট নিন)।
আপনি যদি জিতেন,
>_angman
h
>hangman
>_____ // new round
আপনি জিতেছেন (যে ইনপুটটির কোনও আন্ডারস্কোর নেই) জেনে যাওয়ার পরে, আপনাকে অবশ্যই পরবর্তী রাউন্ডটি গ্রহণ করতে প্রস্তুত থাকতে হবে।
আপনার প্রোগ্রামটি কোনও ইনপুট এলে অবশ্যই শেষ করতে হবে END
।
যদি আপনার প্রোগ্রামটি সংজ্ঞাবহ না হয় (এলোমেলোতা, সিউডোর্যান্ডমনেস, সিস্টেমের সময়, পরিবেশন তাপমাত্রা, আমার মেজাজ ইত্যাদির উপর নির্ভর করে), আপনাকে অবশ্যই স্পষ্ট করে বলতে হবে যে আপনার জমা দেওয়ার সময় এবং আপনার স্কোর 10 বার নেওয়া হবে (অন্যথায় নির্দেশ না দেওয়া পর্যন্ত) এবং গড়।
দ্রষ্টব্য : আপনি যদি পাইথনের মতো ভাষা ব্যবহার করেন তবে দয়া করে প্রতিটি মুদ্রণ বিবরণের পরে স্পষ্টতই আপনার স্টাডাউটটি ফ্লাশ করুন।
গেম প্রোগ্রামটি নিম্নরূপ ( নিওনিওর কাছে creditণ ):
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
গেমটি চালানোর জন্য আমি কি বাহ্যিক ফিফোর পরিবর্তে ব্যবহারের পরামর্শ দিতে পারি ? এই কোডটি অন্যান্য ওএসের জন্য কাজ করবে (উদাহরণস্বরূপ, উইন্ডোজ-এ সিগউইন)। কমান্ড-লাইনে নামকরণ করা প্রোগ্রামটি চালু game.py
করতে এখানে পরিবর্তন করতে হবে subprocess
: gist.github.com/nneonneo/d173f8888e1ea0c6fe37 । python game.py <program> [args]
যেমন হিসাবে এটি ব্যবহার করুন python game.py python hangman.py
।