হ্যাঙ্গম্যান ওয়ার্ডগেম গল্ফ


14

Reddit দ্বারা অনুপ্রাণিত ।

একটি প্রোগ্রাম লিখুন যা হ্যাঙ্গম্যান বাজায় ।

  • প্রোগ্রামটি এন শব্দগুলির একটি তালিকা থেকে একটি এলোমেলো শব্দ চয়ন করে, যেখানে এন> 2।
  • শব্দ তালিকা আপনি যেভাবে বেছে নিন প্রোগ্রামটিতে সরবরাহ করা যেতে পারে।
  • প্রতিটি পুনরাবৃত্তিতে

    • এখনও আবিষ্কার হয়নি এমন অক্ষরের জন্য আন্ডারস্কোর ব্যবহার করে গেমের অবস্থা মুদ্রণ করুন:

    H _ N _ _ _ N

    • অবশিষ্ট প্রচেষ্টা সংখ্যা মুদ্রণ করুন

    10

    • স্টিডিনের কাছ থেকে একটি চিঠি পড়ুন এবং কোনও ভুল চিঠিটি অনুমান করে যদি একটি প্রচেষ্টা বিয়োগ করে গেমের অবস্থা আপডেট করুন।

    A (ইনপুট)

    H A N _ _ A N

    10

    • সমস্ত অক্ষর অনুমান করা বা প্রচেষ্টা 0 না পৌঁছানো পর্যন্ত পুনরাবৃত্তি করুন
  • যে কোনও ভাষা ব্যবহার করুন
  • সবচেয়ে কম সংখ্যক অক্ষর জিতেছে।
  • ফাঁসির আঁকানো প্রয়োজনীয় নয়, তবে আপনাকে উপার্জন এবং কুড়ো উপার্জন করবে।

আমি কি তালিকার প্রতিটি শব্দকে একই সংখ্যার অক্ষর হতে পারি?
পিটার ওলসন

আউটপুটে বর্ণগুলি কি ফাঁক দিয়ে আলাদা করতে হবে?
লোজ্যাকার

@ পিটার অফ কর্ন: আপনার ধারণা করা উচিত যে শব্দের তালিকাটি নির্বিচারে
drspod

@ লাউজ্যাকার: স্পেসগুলি ক্রমাগত আন্ডারস্কোরগুলির সুষ্ঠুতা উন্নত করে, অন্যথায় তারা কতগুলি অক্ষর উপস্থাপন করে তা গণনা করা শক্ত।
drspod

উত্তর:


6

রুবি 1.9, 134 132 120 117 108 107

শব্দ তালিকা এআরজিভিতে সরবরাহ করা হয়েছে। শব্দ এবং প্রবেশ করা অক্ষরের ক্ষেত্রে অবশ্যই মিলবে।

r=w=$*.sample
t=10
loop{puts [*w.tr(r,?_).chars]*' ',t
t>0&&r>''?w[l=STDIN.gets[0]]?r=r.tr(l,''):t-=1:exit}

8

ডার্ন, আমি ভেবেছিলাম এটি বলেছিল "স্বল্প সংখ্যক লাইনের জয়"। আমি এখানে কোনও কয়েকটি সর্বাধিক-চরিত্রের প্রতিযোগিতা জিততে যাচ্ছি না, তবে এই প্রচলিত লিস্প প্রোগ্রামটি কেবল একটি লাইন।

(let ((words (list "that" "help" "rent" "chair" "octopus" "monitor" "manual" "speakers" "onomatopoeia" "regardless" "irresponsible" "cornerstone"))) (let ((word (nth (random (length words)) words))) (format t "~a~%" (funcall (defun play (word current remaining-attempts) (progn (if (not (find #\_ current)) (return-from play "You win!")) (if (equalp remaining-attempts 0) (return-from play "You lose!")) (format t "~a~%~d~%" current remaining-attempts) (let ((guess (char (read-line) 0)) (index 0) (found nil)) (loop for letter across word do (if (equalp guess letter) (progn (setf (char current index) letter) (setf found t))) (setf   index (+ index 1))) (if found (play word current remaining-attempts) (play word current (- remaining-attempts 1)))))) word (map 'string #'(lambda (c) #\_) word) 10))))

1
আমি আপনাকে উজ্জীবিত করছি কারণ আমি নিশ্চিত যে আপনি ইচ্ছাকৃতভাবে হাস্যরসাত্মক হচ্ছেন :-)
ডাঃ পেইন

8

পাইথন ঘ।

from random,sys import *
w=choice(*argv)
L=set(w)
a=10
while L and a:
 print(" ".join("_"if x in L else x for x in w),a)
 try:L-=set(input()[0])
 except:a-=1

আমি যদিও এটিকে পছন্দ করি: দীর্ঘতর তবে ভাল।

import random
w=random.choice(list(open("/usr/dict/words")))[:-1]
L=set(w)
a=10
while L and a:
 print(" ".join("_"if x in L else x for x in w),a)
 try:L.remove(input()[0])
 except:a-=1
print w

যদি আমাকেও প্রিন্ট না করতে হয় তবে আমি দুবার aব্যবহার করতে পারি *:print(*("_"if x in L else x for x in w))
ব্যাডপ

4

সি ++ (শিরোনাম)

struct h{h(char a):b(a){}char operator()(char c,char d){return d!='_'?d:c==b?c:'_';}char b;};

int main(int a,char**b){
srand(time(0));string c=*(b+rand()%(a-1)+1),d(c.size(),'_'),e;
char f=10,g;
while(f){
cout<<"> ";cin>>g;e=d;
transform(c.begin(),c.end(),d.begin(),d.begin(),h(g));if(e==d)--f;
cout<<d<<endl<<(int)f<<endl;if(d==c)break;
}return 0;}

বিড়াল / মার্কিন / ডিক / শব্দ | xargs hangman


সমাধানের জন্য ইনপুটটির জন্য ">" প্রম্পটটি প্রয়োজনীয় নয়, আমি এটি কেবল ইনপুট ছিল তা বোঝাতে প্রশ্নটিতে যুক্ত করেছি, কারণ অনেকগুলি ভাষা এর মতো একটি প্রম্পট সরবরাহ করে।
drspod

@drspod এটিকে প্রতিফলিত করার জন্য আপনার প্রশ্নের সম্পাদনা করা উচিত।
লোজ্যাকার

স্পষ্ট করতে সম্পাদিত
drspod

2

পাইথন

import random

DEFAULT_ATTEMPTS = 10

def print_word(word, uncovered):
    for c in word:
        if c not in uncovered:
            c = '_'
        print c,
    print ''

def get_letter():
    letter = None
    while letter is None:
        letter = raw_input('> ')
        if len(letter) != 1:
            print 'Letters must be 1 character.  Try again.'
            letter = None
    return letter

if __name__ == '__main__':
    import sys

    if len(sys.argv) != 2: sys.exit(1)
    with open(sys.argv[1], 'r') as f:
        words = [word.strip() for word in f.readlines() if word.strip()]

    word = random.choice(words)
    uncovered = set([' '])
    attempts = DEFAULT_ATTEMPTS

    while attempts > 0 and any(letter not in uncovered for letter in word):
        print_word(word, uncovered)
        print attempts

        letter = get_letter()
        if letter in uncovered:
            print 'You have already tried that letter.'
        elif letter in word:
            print 'You got it!'
        else:
            print 'Wrong!'
            attempts -= 1

        uncovered.add(letter)

    if attempts == 0:
        print 'You lose!',
    else:
        print 'You win!'
    print 'The phrase was "%s".' % word

আমি সত্যিই কয়েকটি সংখ্যক চরিত্রের জন্য চেষ্টা করি নি, কেবল কিছু ত্যাগ না করে এটিকে যতটা সম্ভব ছোট করতে চেয়েছিলাম।


@ ব্যবহারকারী: আপনি এই সাইটের জন্য জর্জ এডিসনের দুর্দান্ত ইউজার স্ক্রিপ্টে আগ্রহী হতে পারেন যা আপনার কোডটি 1225 টি অক্ষরে আপনার কোড (বাজেপ দ্বারা অনুলিপি করা) হিসাবে রাখে।
ডিএমকেকে --- প্রাক্তন মডারেটর বিড়ালছানা

আমি মনে করি এই কারণেই আমি ট্যাবগুলি ব্যবহার করছিলাম এবং সেগুলি এখানে স্পেসে রূপান্তরিত হয়েছিল। ডাব্লুসিটি বলছে এটি ট্যাব সহ 1034।
সের্গেই জি

@ ব্যবহারকারী: হ্যাঁ পাইথন জমা দেওয়ার ক্ষেত্রে একটি সুপরিচিত অসুবিধা
ডিএমকেকে --- প্রাক্তন মডারেটর বিড়ালছানা

2

পার্ল, 112 চর। আমার মনে হচ্ছে আমি আরও ভাল করতে পারি - সম্ভবত পরে আবার চেষ্টা করব

$_=$ARGV[rand@ARGV];$a=10;while($a&&/[a-z]/){print map/[A-Z]/?$_:'_',split'';$x=<STDIN>;chop$x;s/$x/$x/ig||$a--}

শব্দগুলি কমান্ড লাইনে দেওয়া হয়, অক্ষরগুলি টাইপ করে উপরের ক্ষেত্রে


নিচে 107 $_=$ARGV[rand@ARGV];$a=10;while($a&&/[a-z]/){$y=$_;$y=~y/a-z/_/;print$y;$x=<STDIN>;chop$x;s/$x/$x/ig||$a--}

3
আপনি কেবল আপনার মূল উত্তরটি সম্পাদনা করতে পারেন।
লোজ্যাকার

1
এটি বাকি প্রচেষ্টার সংখ্যা প্রদর্শন করে না।
লোজ্যাকার

2

Clojure

এটি 400 বাইট গিজিপড, যা ক্লোজুর পারস্পরিক পরিবর্তনকে কীভাবে পরিচালনা করে তা সম্ভবত এটি এখনও অনেকটাই।

(def m ["will" "work" "for" "food"])
(def w (nth m (rand-int (count m))))
(def *s* (atom (replicate (count w) "_")))
(def *a* (atom 10))

(defn g [s a]
  (str (apply str (interpose " " s)) "\n" a))

(loop [n (read-line)]
  (if (some (set n) w)
    (swap! *s* (fn [s]
                 (map 
                   (fn [i]
                     (if (= n (str (nth w i)))
                       n
                       (nth s i)))
                   (range 0 (count s)))))
    (swap! *a* dec))

  (println (g (deref *s*) (deref *a*))) 

  (if (and (< 0 (deref *a*)) (some #{"_"} (deref *s*)))
    (recur (read-line))))

2

সি # 370

using System;namespace h{class P{static void Main(string[]a){int c=10,d,l;char y=' ';string w=a[new Random().Next(a.Length)];l=w.Length;char[]x=new char[l];for(d=-1;++d<l;x[d]='-');while(c>0){for(d=-1;++d<l;x[d]=(y==w[d]||x[d]!='-')?w[d]:x[d]);Console.WriteLine(new string(x)+" "+c);if(w==new string(x))return;y=Console.ReadKey(true).KeyChar;if(!w.Contains(y+""))c--;}}}

যুক্তি হিসাবে শব্দ তালিকা


1

VB.NET


আমি এখনও এটি সঙ্কুচিত করার চেষ্টা করি নি, তবে:
প্রথম সঙ্কুচিত:
দ্বিতীয় সঙ্কুচিত (3759 অক্ষর):

Module Hangman
    Sub Main()
        Dim m As Int32, w = "banana|apple|pear|dog|cat|orange|monkey|programming|hangman".Split("|")(New Random().Next(9)), g = "", e = "", x, c As Char, f As Boolean, r = Sub(z) Console.Write(z), p = Sub(y, h) Console.SetCursorPosition(y, h), a = Sub() Console.Clear(), q = Function() Console.ReadKey(1), d = Sub()
                                                                                                                                                                                                                                                                                                                          r("       +--------+S       |        |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S                |S   ---------------------".Replace("S", vbCrLf))
                                                                                                                                                                                                                                                                                                                          p(0, 2)
                                                                                                                                                                                                                                                                                                                          r(String.Join(vbCrLf, "    /------\S    | O   O|S    \  ... /S     ------ S        |   S        |   S        |   S        |   S -------+-------S        |   S        |   S        |   S       / \  S      /   \  S     /     \  S    /       \  ".Split("S").Take(m * 4)))
                                                                                                                                                                                                                                                                                                                      End Sub
        Console.CursorVisible = 0
        Do
            a()
            d()
            p(30, 10)
            f = 0
            For Each x In w
                If g.Contains(x) Then
                    r(x)
                Else
                    r(" ")
                    f = 1
                End If
                Console.CursorTop += 1
                Console.CursorLeft -= 1
                r("_")
                Console.CursorTop -= 1
                r(" ")
            Next
            If Not f Then
                a()
                d()
                p(30, 10)
                r("You win! Press any key to close.")
                q()
                End
            End If
            p(30, 13)
            r(e)
            Do
                c = q().KeyChar
            Loop Until Char.IsLetter(c)
            If g.Contains(c) Then
                e = "You have already guessed that letter."
            Else
                g &= c
                If w.Contains(c) Then
                    e = "There is a" & If("aehilmnorsx".Contains(c), "n", "") & " """ & c & """ in the word."
                Else
                    e = "There is no """ & c & """ in the word. Try again."
                    m += 1
                End If
            End If
        Loop Until m = 4
        a()
        d()
        p(30, 10)
        r("You lose! Press any key to close.")
        q()
    End Sub
End Module

সমস্ত ইন্ডেন্টেশন কি সত্যিই প্রয়োজনীয়?
লোজ্যাকার

এটি পড়া সহজ করে তোলে, তাই না?
নাট কোপেনহেভার

ব্লক হিসাবে? না, এটি প্রয়োজন হয় না, তবে আমি এটি অক্ষর হিসাবে গণনা করি না।
রাই-

0

পাওয়ারশেল, 125 বাইট

$w=$h=$args|random|% t*y
for($n=10){$w-replace"[ $h]",'_'-join' ';$n
if(!$h+!$n){break}$n-=($c=Read-Host)-notin$h
$h=$h-ne$c}

কম গল্ফ পরীক্ষা স্ক্রিপ্ট:

$f = {

$word=$hidden=$args|random|% toCharArray    # let $word and $hidden are a random word chars
#$word                                      # uncomment this to cheating
for($n=10){                                 # forever for with init section
    $word-replace"[ $hidden]",'_'-join' '   # display the word with hidden letters
    $n                                      # display $n
    if(!$hidden+!$n){break}                 # break loop if hidden array is empty or n equal to 0
    $n-=($c=Read-Host)-notin$hidden         # input $c from user, decrease $n if $c does not in $hidden array
    $hidden=$hidden-ne$c                    # recreate $hidden array with removed $c
}

}

$words = gc .\wordlist.txt
&$f $words

অনুমানকারী প্লেয়ারটি হারিয়ে গেলে আউটপুট উদাহরণ :

_ _ _ _ _ _ _ _
10
i
_ _ _ _ _ _ _ _
9
e
_ _ e _ _ _ _ e
9
o
o _ e _ _ o _ e
9
a
o _ e _ _ o _ e
8
q
o _ e _ _ o _ e
7
q
o _ e _ _ o _ e
6
q
o _ e _ _ o _ e
5
q
o _ e _ _ o _ e
4
q
o _ e _ _ o _ e
3
q
o _ e _ _ o _ e
2
q
o _ e _ _ o _ e
1
q
o _ e _ _ o _ e
0

অনুমানকারী খেলোয়াড় জিতে গেলে আউটপুট উদাহরণ :

_ _ _ _ _ _ _ _ _ _
10
e
_ _ _ _ e _ _ _ _ _
10
o
_ o _ _ e _ _ _ _ _
10
i
_ o _ _ e _ _ i _ _
10
a
_ o _ _ e _ _ i a _
10
l
_ o _ _ e _ _ i a l
10
c
c o _ _ e _ c i a l
10
m
c o m m e _ c i a l
10
t
c o m m e _ c i a l
9
r
c o m m e r c i a l
9
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.