पर्ल 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नियमों को छापने के बाद से, इसकी अनुमति है; हालांकि उन उपयोगों को समाप्त करने पर केवल दो अतिरिक्त बाइट का खर्च आएगा। इसके विपरीत, सभी आउटपुट अपरकेस (जो, ऊपर की टिप्पणियों के आधार पर, अनुमति दी जा सकती है) बनाने से मुझे तीन बाइट्स बचाने होंगे।
WhileURong(USayNumbr;ISayBigrOrSmalr)