जल्लाद वर्डगेम गोल्फ


14

से प्रेरित होकर reddit

एक प्रोग्राम है जो खेलता लिखें जल्लाद

  • कार्यक्रम एन शब्दों की एक सूची से एक यादृच्छिक शब्द चुनता है, जहां एन> 2।
  • शब्द सूची किसी भी तरह से आपके द्वारा चुने गए कार्यक्रम को प्रदान की जा सकती है।
  • प्रत्येक पुनरावृत्ति पर

    • अभी तक खोजे गए पत्रों के लिए अंडरस्कोर का उपयोग करके खेल की स्थिति का प्रिंट आउट लें:

    H _ N _ _ _ N

    • शेष प्रयासों की संख्या प्रिंट करें

    10

    • यदि वे गलत पत्र का अनुमान लगाते हैं, तो स्टड से एक पत्र पढ़ें, और खेल की स्थिति को अपडेट करें, एक प्रयास को घटाएं।

    A (इनपुट)

    H A N _ _ A N

    10

    • तब तक दोहराएं जब तक कि सभी अक्षरों का अनुमान न हो जाए या प्रयास 0 तक न पहुंच जाएं
  • किसी भी भाषा का उपयोग करें
  • कम से कम वर्ण जीतता है।
  • फांसी की सजा देना आवश्यक नहीं है, लेकिन आप ऊपर और kudos अर्जित करेंगे।

क्या मैं सूची में प्रत्येक शब्द को वर्णों की समान संख्या बता सकता हूं?
पीटर ओल्सन

क्या आउटपुट में अक्षरों को रिक्त स्थान द्वारा अलग किया जाना है?
लॉजैकर

@ कॉटर ऑफ़ द कॉर्न: आपको यह मान लेना चाहिए कि शब्द सूची मनमानी है
drspod

@Lowjacker: रिक्त स्थान लगातार अंडरस्कोर की सुगमता में सुधार करते हैं, अन्यथा यह गिनना मुश्किल है कि वे कितने अक्षरों का प्रतिनिधित्व करते हैं।
drspod

जवाबों:


6

रूबी 1.9, 134 132 120 117 117 108 107

ARGV में दी गई शब्द सूची। शब्दों और दर्ज किए गए अक्षरों को मामले में मेल खाना चाहिए।

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))
badp

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;}

बिल्ली / usr / तानाशाह / शब्द | xargs जल्लाद


इनपुट के लिए ">" प्रॉम्प्ट समाधान के लिए आवश्यक नहीं है, मैंने इसे केवल यह इंगित करने के लिए प्रश्न में जोड़ा कि यह इनपुट था, क्योंकि कई भाषाएं इस तरह एक प्रॉम्प्ट प्रदान करती हैं।
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

मैंने वास्तव में सबसे कम पात्रों के लिए प्रयास नहीं किया, बस इसे कुछ भी त्याग किए बिना जितना संभव हो उतना छोटा बनाना चाहता था।


@user: आप इस साइट के लिए जॉर्ज एडिसन की अद्भुत उपयोगकर्ता लिपि में रुचि ले सकते हैं जो 1225 अक्षरों में आपके कोड को (बैड द्वारा यहां कॉपी किया गया है) डालता है।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली का बच्चा

मुझे लगता है कि यही कारण है कि मैं टैब का उपयोग कर रहा था और वे यहां रिक्त स्थान में परिवर्तित हो गए थे। wc का कहना है कि यह टैब के साथ 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

क्या वास्तव में सभी इंडेंटेशन की आवश्यकता है?
लोजैकर

यह पढ़ना आसान बनाता है, है ना?
नैट कोपेनहेवर

ब्लॉक के रूप में? नहीं, इसकी आवश्यकता नहीं है, लेकिन मैं इसे पात्रों के रूप में नहीं गिनता।
Ry-

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.