बहुत कम करने के लिए सबसे छोटा कोड - बहुत ऊँचा खेल


20

आपको एक गेम बनाना है बहुत कम --- बहुत उच्च (TLTH) सबसे छोटे कोड में (बाइट्स में)

खेल के नियमों:

  1. कंप्यूटर पूर्णांक श्रेणी (-32768..32767) से एक यादृच्छिक संख्या का चयन करेगा।
  2. अब आप एक नंबर के बारे में सोचेंगे और इसे इनपुट करेंगे।
  3. कंप्यूटर बताएगा कि आपका नंबर चुने गए नंबर से कम है ( TOO LOWया अधिक TOO HIGH)।
  4. जब आप संख्या का अनुमान लगाते हैं, तो कंप्यूटर को प्रदर्शित करना चाहिए Congrats! You found the number!

कोड नियम:

  1. पात्रों का प्रयोग न करें T, O, L, W, H, Iऔर Gस्ट्रिंग या चरित्र शाब्दिक में (न लोअरकेस और न ही अपरकेस)।
    उदाहरण के लिए:

    tolower(T);  // Acceptable  
    cout<<"T";   // Unacceptable
    char ch='T'; // Unacceptable
    
  2. यदि आपका कोड गेम शुरू करने से पहले गेम नियमों को प्रदर्शित कर सकता है तो 300 बाइट्स निकालें

  3. 50 बाइट निकालें यदि आपका कोड इस तरह के गेम के अंत में लिए गए टर्न की संख्या और डिस्प्ले की संख्या की गणना कर सकता है:

    "Congrats! You found the number in n turns!"
    

    जहां n की जगह बदले की संख्या है

    "Congrats! You found the number!"  
    
  4. अपने स्कोर से 25 बाइट्स निकालें यदि आपका कोड उपयोगकर्ता को बता सकता है कि आपके द्वारा इनपुट नंबर पूर्णांक सीमा से बाहर है।
    उदाहरण के लिए:

    Enter the number: 40000  
    Sorry! This number is out of range
    Please Enter the number again:  
    
  5. 25 बाइट्स निकालें यदि आपका कोड किसी भी अंतर्निहित यादृच्छिक फ़ंक्शन से यादृच्छिक संख्या नहीं लेता है।

  6. 10 बाइट्स निकालें यदि आपका कोड रंग में "बधाई" देता है (डिफ़ॉल्ट सफेद को छोड़कर किसी भी रंग को चुनें)।

प्रस्तुत नियम:

  1. अपने भाषा के नाम के साथ एक शीर्षक जोड़ें और सभी इनाम गणना और उसके स्पष्टीकरण के साथ स्कोर करें।

  2. अपना गोल्फ और बिना कोड वाला कोड पोस्ट करें।

विजेता

  1. कम से कम बाइट्स वाला उत्तर जीतता है।
  2. यदि कोई टाई है, तो अधिक वोटों के साथ जवाब जीत जाता है।
  3. विजेता को 5 दिनों के बाद चुना जाएगा।

संपादित करें : कृपया अपने कोड का आउटपुट दिखाएं।
EDIT-2 : आप नियम-2,3 और 4 के लिए नियम नियमों में नियम -1 की अनदेखी कर सकते हैं

शुभकामनाएँ :]


2
क्या यह खेल नियमों का एक वैध विवरण है? WhileURong(USayNumbr;ISayBigrOrSmalr)
जॉन ड्वोरक

1
स्कोरिंग के आपके विवरण के आधार पर, आपके पास न तो एक कोड गोल्फ है और न ही एक लोकप्रियता प्रतियोगिता है। यह एक कोड चुनौती है (एक लोकप्रियता टाईब्रेकर के साथ)। टैग विकी देखें। मैंने चुनौती को उचित रूप से टैग करने के लिए एक संपादन का प्रस्ताव रखा। ps - जिंक्स! @ मनिनीप
जोनाथन वान

1
@JonathanVanMatre मुझे टाई-ब्रेकर के बावजूद कोड-गोल्फ की तरह लगता है ।
मनिप

21
इसके अलावा, मैं विशेष रूप से अन्य खिलाड़ियों को उनके जवाब में सुधार करने में सहायता करने के खिलाफ नियम पसंद नहीं करता। द प्रिंसेस ब्राइड में आंद्रे द जाइंट के अमर शब्दों में, "यह बहुत स्पोर्ट्समैन जैसा नहीं है"।
जोनाथन वान मैट्रे

1
यह सवाल तो है। । । डेविड एच। अहल
माइकल स्टर्न

जवाबों:


2

जावास्क्रिप्ट (-210 अंक) ( 190बाइट्स - 300 (नियमों के लिए) - 50 (अनुमानों की संख्या के लिए) - 25 (किसी भी अंतर्निहित यादृच्छिक संख्या स्रोत का उपयोग नहीं करने के लिए) - 25 (यह बताने के लिए कि इनपुट किसी हस्ताक्षरित की सीमा से बाहर है 16-बिट पूर्णांक) ):

golfed:

alert('Guess number',n=(m=2<<15)/2-new Date%m);for(z=0;a=+prompt(++z);)alert(a>m|a<1-m?m+'-'+-~-m:a==n?'Great! You found the number in '+z+' turns':atob('VE9P\x47E'+(a>n?'hJR0g=':'xPVw==')))

पूर्ण कोड (अच्छी तरह से स्वरूपित):

var max = 2 << 15;
var random = max/2 - new Date%max;
var counter = 0;

while (1) {
    var guess = +prompt();

    ++counter;

    if (guess > max | guess < -~-max) {
        alert(-~-max + '-' + max); // Shows that the range is between -32767 and 32768
    } else if (guess > random) {
        alert('TOO HIGH');
    } else if (guess < random) {
        alert('TOO LOW');
    } else if (guess == random) {
        alert('Congrats! You found the number in ' + counter + ' turns');
        break;
    }
}

आउटपुट:

ALERT:  Guess number
PROMPT: 5
ALERT:  TOO LOW
PROMPT: 20000
ALERT:  TOO LOW
PROMPT: 30000
ALERT:  TOO HIGH
PROMPT: 25000
ALERT:  TOO HIGH
PROMPT: 22500
ALERT:  TOO HIGH
PROMPT: 21000
ALERT:  TOO HIGH
PROMPT: 20500
ALERT:  TOO HIGH
PROMPT: 20200
ALERT:  TOO LOW
PROMPT: 20400
ALERT:  TOO LOW
PROMPT: 20450
ALERT:  TOO LOW
PROMPT: 20475
ALERT:  TOO HIGH
PROMPT: 20460
ALERT:  TOO LOW
PROMPT: 20468
ALERT:  TOO HIGH
PROMPT: 20464
ALERT:  TOO LOW
PROMPT: 20466
ALERT:  TOO LOW
PROMPT: 34000
ALERT:  -32767-32768
PROMPT: 20467
ALERT:  Great! You found the number in 17 turns!
PROMPT: (nothing)

@IlmariKaronen क्षमा करें, मैंने एक गलती की। मैंने अपना उत्तर अपडेट कर दिया है।
टूथब्रश

धन्यवाद, अब यह चलता है ... लेकिन अगर मुझे लगता है कि यह टूटने लगता है 0। :-( इसके अलावा, वहाँ में कोई रिक्त स्थान नहीं होना चाहिए TOO LOW/ TOO HIGH?
Ilmari कारोनेन

19

पर्ल 5.10+: 159 144 बाइट्स - 350 = .206 अंक

say"Guess 16 bit signed number";$==32767-rand 65536;say(TOO.$",$_<0?LOW:HIGH)while++$i,$_=<>-$=;say"Congrats! You found the number in $i turns!"

संपादित करें 2: हाल के नियमों में बदलाव से मुझे "बधाई" संदेश के लिए किसी भी स्ट्रिंग शाब्दिक का उपयोग करने की अनुमति मिलती है, मैं अपने मूल 159-बाइट समाधान से 15 बाइट बचा सकता हूं। पुराने कोड की तुलना में ऊपर दिए गए नए कोड के बारे में कुछ भी विशेष रूप से उपन्यास या दिलचस्प नहीं है (मैं सिर्फ pफ़ंक्शन से छुटकारा पाया , और sayइसके बजाय सीधे कॉल करता हूं ), इसलिए इस पोस्ट के शेष मूल कोड का वर्णन करेंगे, जो नीचे दिखाया गया है:

sub p{say join$",@_}p Guess,16,bit,signed,number;$==32767-rand 65536;p(TOO,$_<0?LOW:HIGH)while++$i,$_=<>-$=;p Congrats."!",You,found,the,number,in,$i,turns."!"

हाँ, मैं नियम से बाहर नर्क का दुरुपयोग कर रहा हूं। 1. जब आपको नंगे पासवर्ड हो सकते हैं, तो तार की आवश्यकता कौन है ? ;-)

perl -M5.010पर्ल 5.10+ sayसुविधा को सक्षम करने के लिए चलाएं (या 5 बाइट की अतिरिक्त लागत के pसाथ फ़ंक्शन के शरीर को बदलें print join$",@_,$/)।

बोनस स्कोर:

  • The300 अंक: "खेल शुरू करने से पहले खेल के नियम प्रदर्शित करें"
  • −50 अंक: "खेल के अंत में लिए गए घुमावों की प्रदर्शन संख्या"

कोड में सख्त अर्थ में कोई स्ट्रिंग शाब्दिक नहीं है, इसलिए मैं कहूंगा कि नियम 1, तकनीकी रूप से, उल्लंघन नहीं है। चाल यह है कि, पर्ल में, बिना use strictकिसी पहचानकर्ता, जो किसी ज्ञात भाषा के कीवर्ड या सबरूटीन के अनुरूप नहीं है, अपने स्वयं के नाम का सरल मूल्यांकन करेगा। फ़ंक्शन pतब शब्दों की एक सूची लेता है और उन्हें रिक्त स्थान से अलग करता है।

उदाहरण प्ले-थ्रू:

Guess 16 bit signed number
0
TOO HIGH
-10000
TOO LOW
-5000
TOO HIGH
-7500 
TOO LOW
-6250
TOO HIGH
-6875
TOO LOW
-6553
TOO HIGH
-6700
TOO HIGH
-6790
TOO LOW
-6745
TOO HIGH
-6767
TOO LOW
-6756
TOO HIGH
-6761
Congrats! You found the number in 13 turns!

संपादित करें: ओह, ठीक है, नियमों का कहना है कि मुझे कोड के एक अन-गोल्‍ड वर्जन को भी पोस्‍ट करने की आवश्‍यकता है, इसलिए यहां यह जाता है। तकनीकी रूप से, यह "डी-गोल्फ" है, क्योंकि मैं आमतौर पर शुरुआत से ही कम या ज्यादा पूरी तरह से गोल्फ के रूप में अपने कोड गोल्फ कार्यक्रमों की रचना करता हूं, और यह कभी-कभी मौलिक रूप से बदलने के बिना सभी "गोल्फ" अनुकूलन को हटाने के लिए मुश्किल हो सकता है कि कैसे कुछ हिस्सों में कार्यक्रम का काम। फिर भी, मैंने कम से कम व्हॉट्सएप, टिप्पणियों और अधिक सार्थक फ़ंक्शन / चर नामों को जोड़ने की कोशिश की है:

sub output {
    # print all arguments separated by spaces, plus a newline:
    # (in the golfed code, I use the special variable $" instead of " " for a space)
    say join " ", @_;
}

# print the rules:
output Guess, 16, bit, signed, number;

# choose a random number between -32768 and 32767 inclusive:
# (in the golfed version, using the special variable $= allows
# the int() to be left out, since $= can only take integer values)
$number = int( 32767 - rand 65536 );

# loop until the input equals the chosen number, printing "TOO LOW / HIGH":
# (the loop ends when $diff == 0, since 0 is false in Perl)
output (TOO, $diff < 0 ? LOW : HIGH) while ++$count, $diff = (<> - $number);

# print congratulations, including the loop count:
output Congrats."!", You, found, the, number, in, $count, turns."!";

Ps। एक विकल्प के रूप में, यदि स्ट्रिंग्स के बजाय नंगे पासवर्ड का उपयोग करना आपके लिए बहुत धोखा है, तो यहां एक 182-बाइट समाधान है जो अक्षरों TOLWHIG को नंगे पासवर्ड में भी उपयोग नहीं करता है (लेकिन एक लिप्यंतरण ऑपरेटर में उनका उपयोग करता है)। 182 - 350 = points168 ​​अंकों के कुल स्कोर के लिए यह अभी भी एक ही बोनस प्राप्त करता है :

sub t{pop=~y/kpqvxyz/tolwhig/r}say"Guess 16 bit signed number";$==32767-rand 65536;say uc t"kpp ".($_<0?qpv:xyzx)while++$n,$_=<>-$=;say t"Cpnzraks! Ypu fpund kxe number yn $n kurns!"

आउटपुट बिल्कुल ऊपर जैसा दिखता है। (मूल) नियमों के अनुसार, मैं अक्षरों का उपयोग करता हूं tऔर iनियमों को छापने के बाद से, इसकी अनुमति है; हालांकि उन उपयोगों को समाप्त करने पर केवल दो अतिरिक्त बाइट का खर्च आएगा। इसके विपरीत, सभी आउटपुट अपरकेस (जो, ऊपर की टिप्पणियों के आधार पर, अनुमति दी जा सकती है) बनाने से मुझे तीन बाइट्स बचाने होंगे।


यह एक अच्छा और चतुर जवाब है! मेरे से +1
मुकुल कुमार

अब जब मैं इसे देखता हूं तो मुझे आश्चर्य होता है कि अगर आप पेनल्टी लेते हैं तो यह रूबी 1.8 से हराया जा सकता है def method_missing *args;args.join' ';end
काया

मैंने आपको अच्छे पुराने जावास्क्रिप्ट के साथ हराया!
टूथब्रश

14

पायथन 2: -80 अंक (270-300-50)

print"WhileURong(USayNumbr;ISayBigrOrSmalr)"
import random
r=random.randint(-32768,32767)
g=i=1
while g:g=cmp(input(),r);print("C\x6fn\x67ra\x74s! Y\x6fu f\x6fund \x74\x68e number \x69n %d \x74urns!"%i,"\x54\x4f\x4f \x48\x49\x47\x48","\x54\x4f\x4f \x4c\x4f\x57")[g];i+=1

स्कोर 270 वर्ण है, निर्देश दिखाने के लिए माइनस 300 है, "बधाई" में अनुमानों की संख्या दिखाने के लिए माइनस 50 है! स्ट्रिंग, कुल नकारात्मक 80 अंकों के लिए।

बिना तार के लूप का अनगुल्ड वर्जन:

while g:
    g=cmp(input(),r)
    print ("Congrats! You found the number in %d turns!"%i,
           "TOO HIGH",
           "TOO LOW")[g]
    i+=1

अंतर्निहित cmpफ़ंक्शन 0 देता है यदि मान समान हैं, -1 यदि पहला छोटा है और 1 यदि बड़ा है तो। मैं मूल्य का उपयोग स्ट्रिंग्स के टपल को इंडेक्स करने के लिए करता हूं, और फिर लूप की निकास स्थिति के रूप में। अनुक्रम को नकारात्मक सूचकांक के साथ अनुक्रमित करना (जैसे -1) अनुक्रम के अंत से शुरू होने के बजाय मायने रखता है।

मुझे XKCD 221 (क्या -25 वर्ण बोनस के लिए अर्हता प्राप्त होगी?) के 4अनुसार, आयात को छोड़ने और मेरे यादृच्छिक संख्या के रूप में उपयोग करने का लालच दिया गया था ।

उदाहरण रन (एक त्रुटि के साथ पूरा, जहां मैं नकारात्मक गणित नहीं कर सकता):

WhileURong(USayNumbr;ISayBigrOrSmalr)
0
TOO HIGH
-16000
TOO LOW
-8000
TOO HIGH
-12000
TOO HIGH
-14000
TOO LOW
-13000
TOO HIGH
-13500
TOO HIGH
-13750
TOO LOW
-13625
TOO HIGH
-13712
TOO LOW
-13660
TOO HIGH
-13640
TOO HIGH
-13685
TOO HIGH
-13700
TOO LOW
-13695
TOO LOW
-13690
TOO LOW
-13687
Congrats! You found the number in 17 turns!

कृपया अपने कोड का नमूना आउटपुट दिखाएं।
मुकुल कुमार

2
क्या यह ब्रेकिंग कोड नियम 1 नहीं है? आउरॉन्ग (USayNumbr; ISayBigrOrSmalr) में एक या अधिक ओएस, Ls, Ws, Hs, Is और Gs शामिल हैं।
फर्स

@ क्रंचर: मुझे यकीन नहीं है कि आपका क्या मतलब है, क्योंकि कार्यक्रम समाप्त हो गया है। आपके द्वारा मान प्राप्त करने के बाद दाईं ओर gशून्य और whileलूप समाप्त होता है।
1930 को ब्लैंकनथ

@ ब्लेकन्थ ओह्स, क्विक रीड
क्रंचर

@ फोर्सYou can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
क्रंचर

13

जावास्क्रिप्ट 293, -300 (नियम) - 50 (प्रदर्शित होता है) - 25 (श्रेणी चेतावनी) - 25 (कोई यादृच्छिक कार्य) = -107 (नया स्कोर)

r=new Date%65536+~(z=32767);n=x="";for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))n++;A("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+"\164urns!")

मैं दावा करता हूँ कि RGB सम्मेलनों से कि रंग एक रंग है, लेकिन यह थोड़े धोखा होगा ...

ओह, और क्या मैं जोड़ सकता हूं, कोई भी नियम # 1 नहीं तोड़ रहा है!

अलर्ट और संकेतों की एक श्रृंखला में आउटपुट

ALERT: Guess my number, I give feedback
PROMPT: 0
ALERT: too low
PROMPT: 16000
ALERT: too low
PROMPT: 24000
ALERT: too low
PROMPT: 28000
ALERT: too high
PROMPT: 26000
ALERT: too high
PROMPT: 25000
ALERT: too low
PROMPT: 25500
ALERT: too high
PROMPT: 25250
ALERT: too low
PROMPT: 25375
ALERT: too high
PROMPT: 25310
ALERT: too low
PROMPT: 25342
ALERT: too low
PROMPT: 25358
ALERT: too low
PROMPT: 25366
ALERT: too high
PROMPT: 25362
ALERT: too high
PROMPT: 25360
ALERT: too high
PROMPT: 25359
ALERT: Congrats! You found the number in 16 turns!

अघोषित कोड:

r = (new Date)%65536+~(z=32767); //Generates random number in range based off date's milliseconds... I'd use epoch, but I need to conserve
n=x=""; // Sets count and input to blank, these change as time goes on
// The line below sets up a call for `alert`, provides the initial rules, and subsequent loops compares the prompt with the number, as well as sets up "too", "high",  "low" and "out of range" message strings, and provides the feedback
for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))
{
    n++; // adds one to count providing the number isn't guessed yet
}
alert("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+" \164urns!") // Congratulates the player, and displays the correct number of turns taken

आप नियमों को ध्यान से पढ़ें? अच्छी तरह से आपको एक आउटपुट के साथ अनगुल्ड कोड पोस्ट करना होगा
मुकुल कुमार

@ मुकुलकुमार ने छांटा ...
वैलीवेस्ट

आप अपने उत्तर को पहले A=alert;से बदलकर और सभी के alertसाथ बदलकर 4 को बचा सकते हैं A। और एक और अगर आप A(0>(x...अर्धविराम के बाद अलर्ट को अंदर ले जाते हैं prompt())!=r;)n++1
डॉकमैक्स

आप बदल सकते हैं feedback if too high/lowजो वर्तमान में 84 वर्णों का उपयोग करता है i give feedback(जिसे केवल 60 वर्णों\151 \147\151ve feedback को सहेजने के लिए 24 वर्णों की आवश्यकता होगी ।
corsiKa

1
मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि आप अंतिम चेतावनी में करने n++के लिए लूप से आगे बढ़ने के लिए स्थानांतरित कर सकते हैं । यह बचा होगा 3.x=prompt(n++)+ ++n+
DocMax

7

जावास्क्रिप्ट, 324 बाइट्स, स्कोर -76

[नियम परिवर्तन के कारण अद्यतन]

  • 324 बाइट्स
  • -300 नियमों को दिखाने के लिए
  • जब उपयोगकर्ता जीतता है तो -50 को दिखाने के लिए
  • -25 उपयोगकर्ता को बताने के लिए जब वह सीमा के बाहर एक नंबर इनपुट करता है
  • निर्मित में यादृच्छिक का उपयोग नहीं करने के लिए -25 (अद्यतन)

कुल स्कोर: -76

golfed:

function q(y){return y.replace(/./g,function(x){h=x.charCodeAt(0);return String.fromCharCode(h>32&h<58?h+32:h)})}d=o=32768;alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");for(a=1,n=new Date%(2*o)-o;d-n;a++)d=+prompt(a),alert(d>=o|d<-o?"BAD":d<n?q("4// ,/7"):d>n?q("4// ()'("):"Congrats! You found the number in "+a+" turns!")

इस झमेले को अन्जाम देता है।

सबसे पहले, ठीक से पहचाना गया (लेकिन यह अभी भी बहुत अच्छे कोड के साथ अच्छा नहीं है):

function q(y) {
  return y.replace(/./g, function(x) {
    h = x.charCodeAt(0);
    return String.fromCharCode(h > 32 & h < 58 ? h + 32 : h)
  })
}

d = o = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

for (a = 1, n = new Date % (2 * o) - o; d - n; a++)
  d = +prompt(), alert(d >= o | d < -o ? "BAD" : d < n ? q("4// ,/7") : d > n ? q("4// ()'(") : "Congrats! You found the number in " + a + " turns!")

दूसरा, पहचानकर्ताओं का नाम बदलना:

function unencrypt(encrypted) {
  return encrypted.replace(/./g, function(character) {
    charCode = character.charCodeAt(0);
    return String.fromCharCode(charCode > 32 & charCode < 58 ? charCode + 32 : charCode)
  })
}

guess = limit = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

for (tries = 1, randomNumber = new Date % (2 * o) - o; guess - randomNumber; tries++)
  guess = +prompt(),
  alert(guess >= limit | guess < -limit ? "BAD" : guess < randomNumber ? unencrypt("4// ,/7") : guess > randomNumber ? q("4// ()'(") : "Congrats! You found the number in " + tries + " turns!")

अतः अनएन्क्रिप्ट फंक्शन को ASCII 33 ( !) और ASCII 58 ( :) के बीच सभी अक्षर मिलते हैं और 32 को जोड़ते हैं, जिससे वे रेंज में वर्णों में परिवर्तित हो जाते हैं A-Z

सभी स्ट्रिंग्स को अनइंक्रिप्ट करके कोड को अधिक ungolf करें:

guess = limit = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

for (tries = 1, randomNumber = new Date % (2 * o) - o; guess - randomNumber; tries++)
  guess = +prompt(),
  alert(guess >= limit | guess < -limit ? "BAD" : guess < randomNumber ? "TOO LOW" : guess > randomNumber ? "TOO HIGH" : "Congrats! You found the number in " + tries + " turns!")

और अंत में कुछ निर्देशों को अन्य स्थानों पर ले जाने देता है, लंबी त्रैमासिक श्रृंखला को इफ़ और इलज़ाम से बदल देता है, समवर्ती तारों में शामिल होता है, और पठनीयता बढ़ाने के लिए गणित को सरल बनाता है:

guess = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

randomNumber = new Date % 65536 - 32768;

for (tries = 1; guess - randomNumber; tries++) {
  guess = +prompt(); // The preceding + is a golfing trick to convert string to number.
  if (guess > 32767 | guess < -32768) {
    alert("BAD");
  } else if (guess < randomNumber) {
    alert("TOO LOW");
  } else if (guess > randomNumber) {
    alert("TOO HIGH");
  } else {
    alert("Congrats! You found the number in " + tries + " turns!");
  }
}

नमूना:

ALERT:  WhileURong(USayNumbr;ISayBigrOrSmalr)
PROMPT: 5
ALERT:  TOO LOW
PROMPT: 20000
ALERT:  TOO LOW
PROMPT: 30000
ALERT:  TOO HIGH
PROMPT: 25000
ALERT:  TOO HIGH
PROMPT: 22500
ALERT:  TOO HIGH
PROMPT: 21000
ALERT:  TOO HIGH
PROMPT: 20500
ALERT:  TOO HIGH
PROMPT: 20200
ALERT:  TOO LOW
PROMPT: 20400
ALERT:  TOO LOW
PROMPT: 20450
ALERT:  TOO LOW
PROMPT: 20475
ALERT:  TOO HIGH
PROMPT: 20460
ALERT:  TOO LOW
PROMPT: 20468
ALERT:  TOO HIGH
PROMPT: 20464
ALERT:  TOO LOW
PROMPT: 20466
ALERT:  TOO LOW
PROMPT: 20467
ALERT:  Congrats! You found the number in 16 turns!"

1
मैं वास्तव में इसे पसंद करता हूं :)
वोले वनीलेब्रेट लुत्ज़

कृपया अपने कोड का नमूना आउटपुट दिखाएं।
मुकुल कुमार

@MukulKumar। हो गया, उत्पादन जोड़ा
विक्टर Stafusa

7

सी - 272 वर्ण - 300 - 50 - 25 = -103

  • -300 नियमों को प्रदर्शित करने के लिए;
  • -50 खिलाड़ी को घुमावों की संख्या बताने के लिए;
  • -25 मानक आरएनजी लाइब्रेरी का उपयोग नहीं करने के लिए।

गोल्फ कोड:

main(i){short a,c=i=0,b=time(0);for(a=b;b--;a=(a*233)+4594);b=a;puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");while(1){i++;scanf("%hi",&a);if(a==b){printf("Congrats! You found the number in %i turns!",i);break;}for(c=0;c^9;c++)putchar(c[a<b?"kff7cfn7!":"kff7_`^_!"]-23);}}

Ungolfed:

int main(int i) {
    short a,
          b = time(0),
          c = i = 0;

    for( a = b ; b-- ; a = (a * 233) + 4594);
    b = a;

    puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");

    while(1) {
        i++;
        scanf("%hi", &a);
        if(a == b) {
            printf("Congrats! You found the number in %i turns!", i);
            break;
        }
        for( c = 0 ; c ^ 9 ; c++ )
            putchar(c[ a < b ? "kff7cfn7!" : "kff7_`^_!" ] - 23);
    }
}

आउटपुट:

उत्पादन


आउटपुट कहां है?
मुकुल कुमार

@ इल्मारीकरोन, ईडीआईटी 2। इसके अलावा, मैं सिर्फ युग नहीं है।
ओबेरॉन

@ ऑबरन कृपया आउटपुट को भी पोस्ट करें
मुकुल कुमार

@ मुकुलकुमार, पोस्टेड
ओबरन

5

C: 237 - 300 - 50 - 25 - 25 - 10: -173 अंक

-300 नियमों के लिए, -50 अनुमानों की संख्या दिखाने के लिए, -25 किसी भी अंतर्निहित यादृच्छिक संख्या जनरेटर का उपयोग नहीं करने के लिए, -25 रेंज संदेश के बाहर के लिए और -10 बधाई संदेश को रंग देने के लिए।

int s[3]={542068564},g,n;main(r){for(r=(short)&r,puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");n++,scanf("%d",&g),s[1]=g<r?5721932:1212631368,g^r;puts(g^(short)g?"OOR":s));printf("\033[31mCongrats! You found the number in %d turns!",n);}

Ungolfed:

int s[3]={542068564},g,n;

main(r){
        for(
                r=(short)&r,
                puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");

                n++,
                scanf("%d",&g),
                s[1]=g<r?5721932:1212631368,
                g^r;

                puts(g^(short)g?"OOR":s)
        );

        printf("\033[31mCongrats! You found the number in %d turns!",n);
}

उदाहरण रन:

WhileURong(USayNumbr;ISayBigrOrSmalr)
-32769
OOR
32768
OOR
0
TOO HIGH
-16384
TOO HIGH
-24576
TOO HIGH
-28672
TOO LOW
-26624
TOO LOW
-25600
TOO HIGH
-26112
TOO LOW
-25856
TOO LOW
-25728
TOO LOW
-25664
TOO HIGH
-25696
TOO HIGH
-25712
TOO LOW
-25704
Congrats! You found the number in 15 turns!

अंतिम पंक्ति लाल रंग की दिखाई देती है।


वाहवाही! आप सभी इनामों को मारो !!!
मुकुल कुमार

4

बैश, -137

स्कोर

273 (बाइट्स) - 300 (नियम) - 50 (गिनती कोशिश) - 25 (OOF चेतावनी) - 25 (कस्टम PRNG) - 10 (रंग)

गोल्फ संस्करण

IFS=# a=(`<$0`)
c=65536
y=$[10#`date +%N`%c]
e(){ echo -e ${a[$1]/z/$z};}
e 7
while read x
do((z++,x+=c/2,i=3+(x>y),x==y))&&break
((x<0||x>c-1))&&i=6
e $i
done
e 5
#TOO LOW#TOO HIGH#\e[32mCongrats! You found the number in z turns!#OOR#Guess my number. I'll say HIGH or LOW.

ध्यान दें कि अंतिम पंक्ति एक टिप्पणी है, इसलिए इसमें कोई स्ट्रिंग या वर्ण शाब्दिक नहीं है।

अनप्लग्ड संस्करण

MYNUMBER=$[10#$(date +%N) % 65536 - 32768]
echo "Guess my number. I'll say HIGH or LOW."

while true; do
    read YOURGUESS
    GUESSES=$((GUESSES + 1))

    if ((YOURGUESS == MYNUMBER)); then
        break
    elif ((YOURGUESS < -32768 || YOURGUESS > 32767)); then
        echo OOR
    elif ((YOURGUESS < MYNUMBER)); then
        echo "TOO LOW"
    else
        echo "TOO HIGH"
    fi
done

echo -e "\e[32mYou found the number in $GUESSES turns!"

नमूना उत्पादन

$ ./tlth
Guess my number. I'll say HIGH or LOW.
-32769
OOR
32768
OOR
0
TOO LOW
16384
TOO HIGH
8192
TOO HIGH
4096
TOO HIGH
2048
TOO HIGH
1024
TOO HIGH
512
TOO HIGH
256
TOO HIGH
128
TOO HIGH
64
TOO HIGH
32
TOO LOW
48
TOO HIGH
40
TOO LOW
44
TOO HIGH
42
Congrats! You found the number in 17 turns!

आखिरी लाइन हरे रंग में छपी है।


3

C #: -30 अंक

  • 345 बाइट्स
  • -300 नियमों को दिखाने के लिए
  • जब उपयोगकर्ता जीतता है तो -50 को दिखाने के लिए
  • -25 उपयोगकर्ता को बताने के लिए जब वह सीमा के बाहर एक नंबर इनपुट करता है

गोल्फ :

int l=-32768,h=32767,n=new Random().Next(l,h),t=0,g=h+1;Console.Write("WhileURong(USayNumbr;ISayBigrOrSmalr)\n");while(n!=g){g=Convert.ToInt32(Console.ReadLine());Console.WriteLine(g==n?"C\x6fn\x67ra\x74s! Y\x6fu f\x6fund \x74\x68\x65 number in {0} \x74urns!":g<l||g>h?"BAD":g<n?"\x54\x4f\x4f \x4c\x4f\x57":"\x54\x4f\x4f \x48\x49\x47\x48",++t);}

इसे चलाने के लिए, इसे एक फ़ाइल (code.cs) में डालें और कमांड लाइन पर स्क्रिप्ट के साथ दौड़ेंscriptcs code.cs :।

Ungolfed : विस्तारित चर नामों को समझने में आसान, और हेक्स पत्रों को वास्तविक अक्षरों में बदल दिया।

int low = -32768, 
    high = 32767, 
    number = new Random().Next(low, high), 
    turns = 0, 
    guess = h+1;
Console.Write("WhileURong(USayNumbr;ISayBigrOrSmalr)\n");  // instructions
while (number != guess)
{
    guess = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(
      guess == number                                     // if you got it right 
        ? "Congrats! You found the number in {0} turns!"  // give the victory speech
        : guess < low || guess > high                     // if out of range
          ? "BAD"                                         // let them know
          : guess < number                                // if guess is low
            ? "TOO LOW"                                   // tell them low
            : "TOO HIGH"                                  // otherwise tell them high
      , ++turns                                           // preincrement turns, add to output
    );
}

नमूना उत्पादन यहाँ उपलब्ध है


3
क्षमा करें यह कह रही है, लेकिन शासन राज्यों के लिए है कि " वर्ण का उपयोग न करें T, O, L, W, H, Iऔर G(न लोअरकेस और न ही अपरकेस) स्ट्रिंग या चरित्र शाब्दिक में। "
विक्टर Stafusa

तो बस की जगह T, O, L... के साथ \x54, \x4F, \x4C... और आप ठीक।
स्लॉथ

धन्यवाद। मैंने सिर्फ गोल्फ संस्करण में स्ट्रिंग शाब्दिक में लागू वर्णों के लिए हेक्स एन्कोडिंग्स में रखा, और तदनुसार स्कोरिंग को संशोधित किया।
याकोव एलिस

कृपया अपने कोड का नमूना आउटपुट दिखाएं।
मुकुल कुमार

@MukulKumar आउटपुट के लिए यहाँ देखें । मैंने भी तर्क में कुछ छोटे बदलाव किए, एक मुद्दा तय किया।
याकोव एलिस

2

C ++ 505 + (-300-50-25-25) = 105

-300: निर्देश
-50: टर्न
-25 की संख्या दिखा रहा है : यादृच्छिक फ़ंक्शन
-25 का उपयोग नहीं करना : उपयोगकर्ता को सीमा से बाहर इनपुट के बारे में चेतावनी देना

golfed

#include<iostream>
#include<stdlib.h>
using namespace std;int main(){short int a,i=0,*r=new short int;int b=0;a=*r;char t[]={84,79,79,' ','\0'},l[]={76,79,87,'\n','\0'},h[]={72,73,71,72,'\n','\0'};cout<<"WhileURong(USayNumbr;ISayBigrOrSmalr)\n";while(a!=b){cin>>b;if(b<-32768||b>32767){cout<<"Sorry! the number is out of range please enter the number again\n";continue;}i++;if(b<a){cout<<'\n'<<t<<l;}if(b>a){cout<<'\n'<<t<<h;}if(a==b){cout<<"Congrats!You found the number in "<<i<<" turns!";}}return 0;}  

UNGOLFED

#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
    short int a,i=0,*r=new short int;
    int b=0;
    a=*r;
    char t[]={84,79,79,' ','\0'},l[]={76,79,87,'\n','\0'},h[]={72,73,71,72,'\n','\0'};
    cout<<"WhileURong(USayNumbr;ISayBigrOrSmalr)\n";
    while(a!=b)
    {
        cin>>b;
        if(b<-32768||b>32767)
        {
            cout<<"Sorry! the number is out of range please enter the number again\n";
            continue;
        }
        i++;
        if(b<a)
        {
            cout<<'\n'<<t<<l;
        }
        if(b>a)
        {
        cout<<'\n'<<t<<h;
        }
    if( a==b)
    {   

            cout<<"Congrats!You found the number in "<<i<<" turns!";
        }
    }
    return 0;
}  

आउटपुट


व्यक्तिगत रूप से, मैं खुद को रोक नहीं सका .. :)
मुकुल कुमार

2

सी, 183-300-25 = -142

नियमों के लिए 183 बाइट्स -300 एक यादृच्छिक पुस्तकालय का उपयोग नहीं करने के लिए

main(){short g,n=time(0)*(time(0)&1?1:-1);puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");while(g^n)scanf("%d",&g),puts(g>n?"TOO HIGH":g<n?"TOO LOW":"Congrats! You found the number!");}

अपंग संस्करण:

main(){
    short g,n=time(0)*(time(0)&1?:-1);
    puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");
    while(g^n)
        scanf("%d",&g),
        puts(g>n?"TOO HIGH":g<n?"TOO LOW":"Congrats! You found the number!");
}

नमूना रन:

WhileURong(USayNumbr;ISayBigrOrSmalr)
40
TOO HIGH
20
TOO HIGH
1
TOO HIGH
0
TOO HIGH
-20
TOO HIGH
-200
TOO HIGH
-2000
TOO HIGH
-20000
TOO LOW
-10000
TOO LOW
-5000
TOO LOW
-3000
TOO HIGH
-4000
TOO LOW
-3500
TOO HIGH
-3700
TOO HIGH
-3900
TOO HIGH
-3950
TOO HIGH
-3970
TOO LOW
-3960
Congrats! You found the number!

"TOO HIGH"और "TOO LOW"दोनों में अवैध चरित्र हैं TOLWHIGtolwhig
ओबेरॉन

जैसा कि "बधाई! आपने नंबर पाया!" और "वंडरगॉन्ग (USayNumbr; ISayBigrOrSmalr)"।
Fors

@ फ़ोर लेकिन उन्हें अनुमति दी जाती है ( EDIT2 देखें )।
ओबेरॉन

वास्तव में वे हैं! किसी कारण से मुझे वह संपादित याद आ गया।
फोर्स

@ ऑबरन TOO LOWको EDIT 2 की अनुमति है ?
टूथब्रश

2

जे - 190 चार -300 -50 = -160 पीटी

'Congrats, you found the number in ',' turns!',~":1>:@]^:(]`(1[2:1!:2~a.{~71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>)@.*@-[:".1!:1@1:)^:_~32767-?2^16['WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2

स्पष्टीकरण (याद रखें कि J को दाएं से बाएं पढ़ा जाता है):

  • 'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2 - नियम प्रिंट करें।
  • 32767-?2^16[- रिटर्न मान टॉस करें, और फिर 0 और 2 ^ 16-1 के बीच एक यादृच्छिक संख्या उत्पन्न करें। फिर, 32767 से घटाकर इसे -32768..32767 की सीमा में समायोजित करें।
  • 1>:@]^:(...)^:_~- x u^:v^:_ yपैटर्न थोड़े समय के लूप की तरह है। xस्थिर रहता है, और yहर निष्पादन के साथ उत्परिवर्तित हो जाता है u। यह तब तक जारी रहता है जब तक या तो x v yरिटर्न 0 नहीं हो जाता है या इसमें x u yकोई बदलाव नहीं होता है y~स्वैप दो तर्क है, ताकि xयादृच्छिक संख्या हो जाएगा और y1. हमारे पर शुरू हो जाएगा uहै >:@], है, जो इस 1 और यह रिटर्न वृद्धि कर देता है तो यह एक काउंटर और रूप में कार्य करता x u yसमाप्ति हालत कभी नहीं हो सकता है।
  • [:".1!:1@1:- काउंटर लें, और इसके मूल्य को अनदेखा करें, इसके बजाय नंबर 1 ( 1:) का उपयोग करें । 1!:1कीबोर्ड से इनपुट की लाइन में ( ) (फ़ाइल हैंडल 1) और इसे निष्पादित करें ( ".)। यह J को अनुमति देता है, जिसका नकारात्मक चिन्ह सामान्य रूप _से संख्याओं को फॉर्म में लेने के लिए है -n(संख्या पर लागू होने वाले ऋणात्मक के रूप में मूल्यांकन करता है n)।
  • ]`(...)@.*@-- पहले और अनुमान से यादृच्छिक संख्या का अंतर लें -। अब, हम इस अंतर के आधार पर अगली कार्रवाई का चयन करते हैं कि क्या यह अंतर शून्य है ( @.*)। यदि यह है, तो ( ]`) उस 0 के परिणाम के रूप में x v y, ताकि निष्पादन समाप्त हो जाए, और पूरे जबकि लूप काउंटर लौटाए। अन्य...
  • 71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>- 5 8 16संख्या नकारात्मक होने पर सरणी लौटाएं , और 1 2 0 1यदि यह सकारात्मक है। तो फिर आगे जोड़ते 13 8 8 _39और सब कुछ करने के लिए 71 जोड़ सकते हैं, तो हम या तो 84 79 79 32 76 79 87या 84 79 79 32 72 73 71 72
  • 1[2:1!:2~a.{~- इन नंबरों को अपने a.साथ वर्णमाला अनुक्रमित करके ASCII वर्णों में बदल दें। फिर उन्हें प्रिंट करें 1!:2(फ़ाइल हैंडल 2 का उपयोग करके) और परिणाम के रूप में 1 लौटें x v y
  • 'Congrats, you found the number in ',' turns!',~":- जब लूप खत्म हो जाता है, तो यह काउंटर को लौटा देता है। इसे स्ट्रिंग के साथ बदलें ":और इसे तार के बीच में डालें 'Congrats, you found the number in 'और ' turns!'

नमूना उत्पादन:

   'Congrats, you found the number in ',' turns!',~":1>:@]^:(]`(1[2:1!:2~a.{~71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>)@.*@-[:".1!:1@1:)^:_~32767-?2^16['WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2
WhileURong(USayNumbr;ISayBigrOrSmalr)
0
TOO HIGH
-20000
TOO LOW
-10000
TOO LOW
-5000
TOO HIGH
-7500
TOO HIGH
-8750
TOO HIGH
-9000
TOO HIGH
-9500
TOO LOW
-9250
TOO HIGH
-9375
TOO HIGH
-9450
TOO LOW
-9400
TOO HIGH
-9425
TOO HIGH
-9437
TOO LOW
-9431
TOO LOW
-9428
TOO HIGH
-9430
TOO LOW
-9429
Congrats, you found the number in 18 turns!

2

जावास्क्रिप्ट -40

335 - 300 (नियम) - 50 (गिनती बदल जाती है) - 25 (सीमा से बाहर)

मुझे नहीं लगता कि मुझे लगता है कि पत्र पाने के लिए एक मजेदार तरीका है।

golfed

!function T(O,L,W,H,I,G){a=T.toString();c=L.floor(65536*L.random())+H;O(W+G+" between "+H+" & "+I);k=(f=a[9]+(d=a[11])+d+" ")+(e=a[17])+a[19]+a[21]+e;l=f+a[13]+d+a[15];for(m=1;(n=prompt(W+G))!=c;m++)n<H||n>I?O("Out of range"):n>c?O(l):O(k);O("Congrats! You found the"+G+" in "+m+" turns!")}(alert,Math,"Guess a",-32768,32767," number")

Ungolfed

!function T(O,L,W,H,I,G){
    fn = T.toString();
    random = L.floor(L.random() * 65536) + H;

    O(W + G + " between " + H + " & " + I);

    tooLow = (too = fn[9] + (o = fn[11]) + o + " ") + (h = fn[17]) + fn[19] + fn[21] + h;
    tooHigh = too + fn[13] + o + fn[15];

    for (n=1; (guess = prompt(W + G)) != random; n++) {
        if (guess < H || guess > I) {
            O("Out of range");  
        } else if (guess > random) {
            O(tooHigh);
        } else {
            O(tooLow);  
        }
    }

    O("Congrats! You found the" + G + " in " + n + " turns!");
}(alert, Math, "Guess a", -32768, 32767, " number")

नमूना उत्पादन

(ALERT) Guess a number between -32768 & 32767
(PROMPT) Guess a number
9999999
(ALERT) Out of range
(PROMPT) Guess a number
0
(ALERT) TOO LOW
(PROMPT) Guess a number
8008
(ALERT) Congrats! You found the number in 3 turns!

1

APL (Dyalog) (157 - 300 - 50 = -193)

(हां, ये बाइट्स के रूप में गिने जाते हैं, एपीएल चारसेट एक बाइट में फिट होते हैं।)

मैंने दावा किया है कि "खेल के नियमों को प्रदर्शित करें" और "मोड़ों की संख्या गिनें"।

G
n←32768-?65536
t←0
⎕←'Guess 16-bit signed number'
t+←1
→8/⍨n=g←⎕
⎕←⎕AV[(⌽⎕AV)⍳'×↑↑ ','○↑-' '∇⌊∘∇'⊃⍨1+n<g]
→4
⎕←'Congrats! You found the number in't'tries!'

उदाहरण रन:

      G
Guess 16-bit signed number
⎕:
      0
TOO HIGH
⎕:
      -10000
TOO LOW
⎕:
      -5000
TOO LOW
⎕:
      -2500
TOO LOW
⎕:
      -1250
TOO HIGH
⎕:
      -1750
TOO LOW
⎕:
      -1500
TOO LOW
⎕:
      -1375
TOO LOW
⎕:
      -1300
TOO LOW
⎕:
      -1275
TOO LOW
⎕:
      -1265
TOO HIGH
⎕:
      -1270
TOO HIGH
⎕:
      -1273
 Congrats! You found the number in  13  tries!

Ungolfed:

GuessNumber;num;tries;guess;decode;too;low;high
decode←{⎕AV[(⌽⎕AV)⍳⍵]} ⍝ invert the character code, char 1 becomes char 255 etc.
num←32768-?65536 ⍝ select a random number
tries←0

⍝ strings for low/high
too←decode '×↑↑ '
low←decode '○↑-'
high←decode '∇⌊∘∇'

⎕←'Guess 16-bit signed number'

try:
  tries +← 1
  guess ← ⎕
  →(guess=num)/found
  ⍝ still here: number was wrong
  ⎕←too, (1+num<guess)⊃low high  ⍝ output appropriate word
  →try ⍝ try again
found:
  ⎕←'Congrats! You found the number in' tries 'tries!'

1

पोगो: -95 (255 - 300 - 50)

method main:void
    print("Guess the number. You will be told if you are high or low.")
    declare(integer,n,0)
    declare(integer,i,0)
    declare(integer,j,0)
    random() i
    while j != i
        set(n+1) n
        print("Number?")
        getinput() j
        if j > i
            print("High")
        end
        else
            print("Low")
        end
    end
    print("Yay" n "turns")
end main

यदि संख्या 10 है:

संख्या?

5

कम

8

कम

12

उच्च

10

याय 4 बदल जाता है


वर्ण गणना सभी व्हाट्सएप हटाए गए कोड पर आधारित है।

ध्यान दें कि पोगो एक नकली भाषा नहीं है। मैंने इसे बनाया और यहां इसके लिए एक कंपाइलर और आईडीई लिखा: https://github.com/nrubin29/Pogo


मेरे EDIT और EDIT - 2
मुकुल कुमार

संपादन के अनुसार अद्यतन किया गया।
nrubin29
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.