পার্ল 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 এর বাইরে নরকে গালাগাল করছি bare কারন স্ট্রিং দরকার, যখন আপনার বেনওয়ারওয়ার্ড থাকতে পারে ? ;-)
perl -M5.010
পার্ল ৫.১০+ say
বৈশিষ্ট্য সক্ষম করতে চালনা করুন (বা p
ফাংশনটির বডি print join$",@_,$/
প্রতি 5 বাইট অতিরিক্ত ব্যয়ের সাথে প্রতিস্থাপন করুন )।
বোনাস স্কোর:
- −300 পয়েন্ট: "গেম শুরু করার আগে গেমের নিয়মগুলি প্রদর্শন করুন"
- −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!
সম্পাদনা: ওহ, ঠিক আছে, বিধিগুলি বলছে আমাকে কোডের একটি অ গল্ফ সংস্করণও পোস্ট করতে হবে, সুতরাং এখানে এটি চলে। প্রযুক্তিগতভাবে, এটি "ডি-গল্ফড", যেহেতু আমি সাধারণত আমার কোড গল্ফ প্রোগ্রাম কমপক্ষে পুরোপুরি গল্ফযুক্ত আকারে রচনা করি এবং কখনও কখনও কিছু কিছু অংশ কীভাবে মৌলিকভাবে পরিবর্তিত না করে সমস্ত "গল্ফ" অপ্টিমাইজেশানগুলি সরিয়ে ফেলা মুশকিল হতে পারে the প্রোগ্রাম কাজ। তবুও, আমি কমপক্ষে সাদা স্থান, মন্তব্য এবং আরও অর্থপূর্ণ ফাংশন / পরিবর্তনশীল নাম যুক্ত করার চেষ্টা করেছি:
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."!";
পুনশ্চ. বিকল্প হিসাবে, যদি কেবল স্ট্রিংয়ের পরিবর্তে খালি শব্দ ব্যবহার করা আপনার জন্য খুব চিটচিটে লাগে তবে এখানে একটি 182 বাইট সমাধান রয়েছে যা অক্ষরগুলি TOLWHIG
এমনকি বেয়ারওয়ার্ডে ব্যবহার করে না (তবে সেগুলি ট্রান্সলিটেশন অপারেটরে ব্যবহার করে)। এটি এখনও 182 - 350 = −168 পয়েন্টের মোট স্কোরের জন্য একই বোনাসগুলি পেয়েছে :
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)