পার্লে গল্ফ করার টিপস?


47

পার্লে গল্ফ করার জন্য আপনার কাছে কোন সাধারণ টিপস রয়েছে? আমি এমন ধারণাগুলি সন্ধান করছি যা পার্লের ক্ষেত্রে কিছুটা নির্দিষ্টভাবে কোড গল্ফ সমস্যার ক্ষেত্রে প্রয়োগ করা যেতে পারে (যেমন "মন্তব্যগুলি সরান" কোনও উত্তর নয়)। দয়া করে উত্তর প্রতি একটি টিপ পোস্ট করুন।

উত্তর:


26

TMTOWTDI

এটি আপনার জানা দরকার সবচেয়ে গুরুত্বপূর্ণ পার্ল গল্ফিং টিপ। আপনি যখনই নিজের কাজটি সম্পাদন করার জন্য একেবারে অক্ষরের কয়েকটি দীর্ঘ ক্রমিকের দিকে নজর রাখছেন, তখন নিজেকে জিজ্ঞাসা করুন কোনও আলাদা বৈশিষ্ট্য ব্যবহার করে একই প্রভাব পাওয়ার অন্য কোনও উপায় নেই কিনা। সাধারণত আছে। এখানে কেবলমাত্র একটি মুষ্টিমেয়:

  • ~~একটি স্কেলার প্রসঙ্গটি প্রয়োগ করে এবং 4 টির চেয়ে কম খাটো হয় scalar

  • y///clengthদৈর্ঘ্য প্রাপ্তির চেয়ে কম একটি চর $_

  • চরগুলিতে পুনরাবৃত্তি করা দরকার $_? split//সঙ্গে প্রতিস্থাপন /./gs। (অথবা /./gকরেন তাহলে আপনি নতুন লাইন এড়িয়ে যেতে চাই।) অন্য ভেরিয়েবল সঙ্গে এই কাজগুলো করেনঃ প্রতিস্থাপন split//,$xসঙ্গে $x=~/./gs

  • প্রতিটি পার্ল অন্তর্নির্মিত কিছু না কিছু দেয়। printউদাহরণস্বরূপ, সফল I / O নির্দেশ করতে 1 প্রদান করে। আপনার যদি $_সত্যিকারের মান শুরু করতে হয়, উদাহরণস্বরূপ, $_=print$fooআপনি একটি পাথর দিয়ে দুটি পাখি মারতে পারবেন।

  • পার্লের প্রায় প্রতিটি বিবৃতি একটি বহিরাগত প্রসঙ্গে ব্যবহারের মঞ্জুরি দিয়ে একটি অভিব্যক্তি হিসাবে লেখা যেতে পারে। একাধিক বিবৃতি কমা দিয়ে এক সাথে বেঁধে একাধিক প্রকাশ হতে পারে can টেস্ট শর্ট-সার্কিট অপারেটার সঙ্গে সম্পন্ন করা যেতে পারে ?: && ||সঙ্গে, এবং এছাড়াও andএবং or, যা একই জিনিস করে কিন্তু প্রাধান্য দিয়ে (নিয়োগ সহ) অন্য সব অপারেটরদের কম। Loops মাধ্যমে করা যাবে mapবা grep। এমনকি কীওয়ার্ডগুলি পছন্দ করে next, lastএবং returnফিরে না আসা সত্ত্বেও একটি অভিব্যক্তি প্রসঙ্গে ব্যবহার করা যেতে পারে! এই ধরণের রূপান্তরগুলি মাথায় রেখে আপনি কোডের ব্লকগুলিকে এক্সপ্রেশন দিয়ে প্রতিস্থাপনের সুযোগ দেয় যা বিভিন্ন প্রসঙ্গে প্রাসঙ্গিক হতে পারে।


$_=print""তুলনায় খাটো $_=print$foo
ASCIIThenANSI

5
ধারণাটি হ'ল আপনার ইতিমধ্যে মুদ্রণ করা দরকার $foo। অন্যথায়, এর $_=1চেয়ে অনেক কম $_=print""এবং একই প্রভাব রয়েছে।
ব্রেডবক্স

3
তৃতীয়টির জন্য আপনি কি চরিত্রগুলি দিয়ে পুনরাবৃত্তি করতে চান $x? অন্যথায় আপনি কেবল /./gsএবং করতে পারে /./g
redbmk

25

পার্ল এর বিশেষ ভেরিয়েবল আপত্তি!

  • পূর্ববর্তী উত্তর যেমন লক্ষ করেছি $/এবং $"ডিফল্ট দ্বারা সক্রিয়া করা হয় "\n"এবং " "যথাক্রমে।

  • $,এবং $\উভয়ই undefডিফল্ট হিসাবে সেট করা হয় এবং 3 টি অক্ষর সংক্ষিপ্ত হয়।

  • $\একটি মান সেট করা এটি প্রত্যেকের সাথে সংযুক্ত হয়ে যায় print। উদাহরণস্বরূপ: perl -ple '$\="=".hex.$/'হ্যান্ডি হেক্স থেকে দশমিক রূপান্তরকারী।

  • আপনি যদি কমান্ড-লাইন থেকে ফাইলগুলি পড়ছেন না, আপনি -iস্ট্রিংকে ইনপুট দেওয়ার জন্য অতিরিক্ত চ্যানেল হিসাবে কমান্ড-লাইন সুইচটি ব্যবহার করতে পারেন । এর মান সংরক্ষণ করা হবে $^I

  • $=এতে যা কিছু নির্ধারিত হয়েছে তাকে পূর্ণসংখ্যা হিসাবে বাধ্য করে। দৌড়তে perl -ple '$_=$==$_'এবং এটিকে বিভিন্ন ইনপুট দেওয়ার চেষ্টা করুন । তেমনি, $-এর মানটিকে একটি অ-নেতিবাচক পূর্ণসংখ্যা হিসাবে বাধ্য করে (যেমন একটি শীর্ষস্থানীয় ড্যাশকে একটি অ-সংখ্যাযুক্ত চরিত্র হিসাবে বিবেচনা করা হয়)।

  • আপনি $.একটি বুলিয়ান পতাকা হিসাবে ব্যবহার করতে পারেন যা while(<>)লুপের প্রতিটি পুনরাবৃত্তিতে স্বয়ংক্রিয়ভাবে সত্য (ননজারো) মানটিতে পুনরায় সেট হয়ে যায় ।


20

-n এবং তুলনামূলক কোঁকড়া বন্ধনী

এটি সর্বজনবিদিত যে কমান্ড লাইন সুইচটি -nপ্রতিটি লাইনের জন্য একবার স্ক্রিপ্টটি কার্যকর করতে ব্যবহার করা যেতে পারে।

perl --help বলেছেন:

  -n                assume "while (<>) { ... }" loop around program

এটি যা স্পষ্টভাবে বলে না তা হ'ল পার্ল প্রোগ্রামের চারপাশে কেবল একটি লুপ ধরে না; এটি আক্ষরিকভাবে এটি while (<>) { ... }প্রায় আবৃত ।

এইভাবে, নিম্নলিখিত কমান্ডগুলি একে অপরের সমতুল্য:

 perl -e 'while(<>){code}morecode'
 perl -ne 'code;END{morecode}'
 perl -ne 'code}{morecode'

-p এবং তুলনামূলক কোঁকড়া বন্ধনী

একইভাবে উপরের দিকে, -pস্যুইচটি while (<>) { ... ; print }প্রোগ্রামের চারপাশে মোড়ানো ।

তুলনামূলকভাবে কোঁকড়া বন্ধনী ব্যবহার করে, perl -p 'code}{morecode'কেবলমাত্র codeসমস্ত ইনপুট লাইন ব্যবহারের পরে একবার মুদ্রণ করা হবে , তারপরে morecode

যেহেতু $_যখন undefined হয় morecode;printমৃত্যুদন্ড কার্যকর করা হয়, আউটপুট রেকর্ড বিভাজক $\প্রকৃত আউটপুট প্রিন্ট করতে নির্যাতিত করা যেতে পারে।

উদাহরণ স্বরূপ

perl -pe '$\+=$_}{'

STDIN থেকে প্রতি লাইনে একটি নম্বর পড়ে এবং তাদের যোগফল মুদ্রণ করে।


আমি ধরে নিচ্ছি আপনি #!perl -nপ্রথম লাইনে এটি অর্জন করতে পারবেন , তাই না?
ASCIIThenANSI

@ এসসিআইথেনানসি: হ্যাঁ, এটি সঠিক। (দেরী জবাবের জন্য দুঃখিত।)
ডেনিস

1
Credit ণ দেওয়ার যেখানে creditণ প্রদান করা, আমি মনে করি আমি প্রথমবারের মতো @ প্রিয়মের পার্ল উত্তরের এই তিনটি কৌশল (তুলনামূলক কোঁকড়ানো বন্ধনী -pএবং $\​) এর সংমিশ্রণটি দেখেছি । তার উত্তরগুলি পড়ার জন্য এটি একটি ভাল পার্ল টিপ।
ডেনিস

1
}for(...){ধনুর্বন্ধনীগুলির মধ্যে একটি নিক্ষেপ করা প্রায়শই বেশ সহজেই কার্যকর হয়, যেমন কোডগলফ.স্ট্যাকেক্সেঞ্জিং.com
প্রিমো

একটি জিনিস যা আমি -n এর সাথে একত্রে দরকারী বলে মনে করি তা হ'ল || = ডিফল্ট মান নির্ধারণকারী অপারেটর। লুপের আগে একটি মান নির্ধারণ করতে সক্ষম না হয়ে প্রায় পাওয়া যায়।
ডেল্টারে

18

$_স্কেলার রেফারেন্সগুলি অপসারণ করতে ব্যবহার করুন । এটি বিশেষ ভেরিয়েবল যা বেশিরভাগ ফাংশন দ্বারা একটি ডিফল্ট হিসাবে ব্যবহৃত হয়, এবং কেবলমাত্র পরামিতিগুলি রেখে যাওয়া এই ভেরিয়েবলটি উল্লেখ করার জন্য একটি শর্টকাট।

পরিবর্তন করে $nথেকে $_, আপনি পরিবর্তন করতে পারেন $n=<>;chop$n;print$nথেকে$_=<>;chop;print

এখানে, printফাংশনটি $_ডিফল্টরূপে সামগ্রীগুলি মুদ্রণ করে chopএবং কাজ করে $_


হয় $_=<>;প্রয়োজন, না <>;মধ্যে লাইন পড়া $_স্বয়ংক্রিয়ভাবে?
sundar

না, আমি এটা মনে করি না। আমি প্রোগ্রাম $_=<>;printএবং তুলনা <>;print। প্রথমটি আমার কাছে পুনরাবৃত্তি করে আমি কী টাইপ করি, অন্যটি না করে।
PhiNotPi

ওহ, ধন্যবাদ, দেখা যাচ্ছে যা কেবলমাত্র এরকম ক্ষেত্রে ঘটে print while(<>)। নিশ্চিত না যে এটি কোনও বিশেষ ক্ষেত্রে বা এর পিছনে কিছু সুসংগত যুক্তি রয়েছে, না এই <>অংশটির অংশ perlopবা whileঅংশের অংশই perlsynএই আচরণের উল্লেখ করেছে বলে মনে হয় না।
সূর্যর

1
@sundar while(<>)একটি বিশেষ কেস, যা পেরসিনে নথিভুক্ত, I / O অপারেটর: 'এবং যদি কেবলমাত্র ইনপুট প্রতীকটি "যখন" বিবৃতিটির শর্তাধীন থাকে (এমনকি "(;;)" এর জন্য ছদ্মবেশী হলেও) লুপ), মানটি স্বয়ংক্রিয়ভাবে গ্লোবাল ভেরিয়েবল assigned _ এ নির্ধারিত হয়, যা আগে যা ছিল তা ধ্বংস করে দেয় ""
কার্নিগ

17

পার্লের বিশেষ ভেরিয়েবলগুলি যেখানে আপনি পারেন যেখানে ব্যবহার করুন, যেমন:

  • $"পরিবর্তে ব্যবহার করুন" "
  • $/পরিবর্তে ব্যবহার করুন"\n"

লেসারের সাহায্যে তাদের গ্যারান্টিযুক্ত এক-চরিত্রের দীর্ঘ শনাক্তকারী হওয়ার অতিরিক্ত সুবিধা রয়েছে। এটি নিম্নলিখিত কীওয়ার্ডটিতে এটি আঠালো করা সম্ভব করে:print$.for@_

সমস্ত বিশেষ ভেরিয়েবলের তালিকা এখানে পাওয়া যায়: বিশেষ চলক


15

ব্যবহার করবেন না qw। এটি এমন দুটি চরিত্রের অপচয় যা আরও ভাল উপায়ে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত লিখবেন না।

@i=qw(unique value);

পরিবর্তে খালি শব্দ ব্যবহার করুন।

@i=(unique,value);

অথবা যদি আপনি খালি শব্দ ব্যবহার করতে না পারেন তবে globবাক্য গঠন ব্যবহার করুন ।

@i=<unique value>;

glob সিনট্যাক্সটি আকর্ষণীয় প্রভাবের জন্যও ব্যবহার করা যেতে পারে।

@i=<item{1,2,3}>;

12

যৌগিক স্টেটমেন্টের পরিবর্তে স্টেটমেন্ট মডিফায়ার ব্যবহার করুন।

যৌগিক বিবৃতিগুলির জন্য ব্লকের জন্য আর্গুমেন্ট এবং ধনুর্বন্ধনীগুলির জন্য প্রথম বন্ধনীর প্রয়োজন হয়, যদিও বিবৃতি সংশোধনকারীগুলির প্রয়োজন হয় না।

তুলনা করা:

  • $a++,$b++while$n-- বনাম while($n--){$a++;$b++}
  • chop$,if$c বনাম if($c){chop$,}

নোট করুন যে শেষ উদাহরণটি এর সাথে সম্পর্কযুক্ত $c&&chop$,তবে বেশিরভাগ বহু-বিবৃতি ক্রিয়াকলাপের জন্য সত্যই জ্বলজ্বল শুরু করে। মূলত যে কোনও কিছুই অপারেটরের নজরে হারায় &&


11

না use strict। (আমাকে পিসি.ই.এস.সি. প্রসঙ্গটি সম্পর্কে এটাকে উদ্ধৃত করবেন না) এবং আরও গুরুত্বপূর্ণ বিষয়, কোডটি এমনভাবে ব্যবহার করবেন না যাতে কঠোরতার অধীনে রয়েছে। স্বাভাবিক সন্দেহভাজন:

  • myযদি আপনি এড়াতে পারেন তবে ভেরিয়েবলগুলি ডিক্লেয়ার করবেন না । সত্যিকারের কেবলমাত্র পরিবর্তনশীলগুলি myহ'ল আপনি লাক্ষিকভাবে বাদ দিতে চান। গল্ফ করার সময় এগুলির মধ্যে সবেই কোনও, যেখানে আপনার স্কোপ সুরক্ষার প্রয়োজন নেই এবং পুনরাবৃত্তি সম্পূর্ণরূপে নিয়ন্ত্রণ করার ঝোঁক রয়েছে।
  • এক-শব্দযুক্ত স্ট্রিং উদ্ধৃত করবেন না: ( উদাহরণ )। যদিও একই নামের সাথে আপনার কোনও ফাংশন নেই তা নিশ্চিত করুন।

5
print helloকাজ করবে না এটির অর্থ আসলে print hello $_( $_ফাইলের কাছে মুদ্রণ hello)।
কনরাড বোরোস্কি

@ গ্লিচমির ধন্যবাদ! (এবং এখন আমাকে ধমক দেওয়া হয়েছে, কারণ আমার বক্তব্যটি এখনও বৈধ, ঠিক এর সাথে নয় print, এবং এখন আমি একটি সুন্দর এবং সংক্ষিপ্ত উদাহরণ খুঁজে পাচ্ছি না)
জেবি

@ জেবি এখানে একটি ভাল উদাহরণ: কোডগলফ.স্ট্যাকেক্সেঞ্জাওটা
7474/6

11

আমি নিশ্চিত যে এর কয়েকটিটির আনুষ্ঠানিক নাম রয়েছে এবং আমি সেগুলি সম্পর্কে ঠিক জানি না।

  • আপনার যদি কিছুক্ষণ লুপ থাকে (বা একটি লুপের জন্য আপনি কিছুক্ষণ লুপ তৈরি করতে পারেন) আপনি কমান্ডের পরে "যখন" সংজ্ঞায়িত করতে পারেন: print $n++ while ($n < 10)
  • আপনার যদি স্টাডিন থেকে স্ট্রিংয়ে সবকিছু পড়তে হয়: $var = join('',<>)
  • সিলিংএসপিতে যেমন উল্লেখ করা হয়েছে, কিছু পরিস্থিতিতে $ / এর পরিবর্তে using n ব্যবহার করা আরও দ্রুত: এর print ('X'*10) . "\n";চেয়ে লম্বাprint ('X'*10) . $/;
  • পার্লের sayফাংশনটি তার চেয়ে কম print, তবে আপনাকে কোডটি এর -Eপরিবর্তে চালাতে হবে-e
  • এর মতো a..zবা এমনকি সীমা ব্যবহার করুন aa..zz। যদি স্ট্রিং হিসাবে প্রয়োজন হয়, ব্যবহার করুন join
  • বর্ধমান স্ট্রিংগুলি: প্রদর্শিত $z = 'z'; print ++$z;হবেaa

এই মুহূর্তে আমি এখনই ভাবতে পারি। আমি পরে আরও কিছু যোগ করতে পারেন।


1
কী print ('X'*10) . $/;করার কথা? আমার জন্য এটি প্রিন্ট করে 0এবং কোনও নতুন লাইন নেই। একটি জিনিসের জন্য, প্রথম বন্ধনীগুলি একটি ফাংশন-স্টাইল কল আর্গুমেন্টে পরিণত হয় print, যা এর চেয়ে আরও শক্ত করে .। এবং আপনি এর xপরিবর্তে *বা কিছু বোঝাতে চেয়েছিলেন ?
aschepler

পোস্টফিক্সে কোনও বন্ধনী প্রয়োজন হয় না while, join'',<>;সেগুলি ছাড়াও কাজ করে না।
চোরোবা

10

পরিবর্তনশীল নাম হিসাবে অ-শব্দ অক্ষর ব্যবহার করুন

ব্যবহার $%পরিবর্তে $aআপনি সঠিক একটি পাশে পরিবর্তনশীল নাম লিখুন করার অনুমতি দিতে পারেন if, forবা whileহিসেবে গঠন করা:

@r=(1,2,3,4,5);$%=4; print$_*$%for@r

অনেকগুলি ব্যবহার করা যেতে পারে তবে ডক্স এবং @ ব্রেডবক্সের উত্তর যাচাই করে যার জন্য যাদু প্রভাব রয়েছে!


আপনি যখন বিবৃতি সংশোধক ব্যবহার করতে পারবেন না তখন মানচিত্রটি ব্যবহার করুন

আপনি যদি @ জেবির উত্তর অনুসারে স্টেটমেন্ট মোডফায়ার ব্যবহার করতে না পারেন , মানচিত্রটি একটি বাইট সংরক্ষণ করতে পারে:

for(@c){} বনাম map{}@c;

আপনি যদি নেস্টেড পুনরাবৃত্তিগুলি করতে চান তবে আপনি দরকারী যখন আপনি পোস্টফিক্স forলুপগুলি ভিতরে রাখতে পারেন map


সমস্ত যাদু নিয়মিত এক্সপ্রেশন ভেরিয়েবল ব্যবহার করুন

পার্লের 'ম্যাচের আগে পাঠ্য' এবং 'ম্যাচের পরে পাঠ্য' এর জন্য যাদু ভেরিয়েবল রয়েছে যাতে সম্ভাব্য কম অক্ষরের সাথে দুটি গ্রুপে বিভক্ত হওয়া সম্ভব:

($x,$y)=split/,/,$_;
($x,$y)=/(.+),(.+)/;
/,/; # $x=$`, $y=$'
# Note: you will need to save the variables if you'll be using more regex matches!

এটি এর প্রতিস্থাপনের পাশাপাশি ভাল কাজ করতে পারে substr:

$s=substr$_,1;
/./;# $s=$'

$s=substr$_,4;
/.{4}/;# $s=$'

আপনার যদি ম্যাচের বিষয়বস্তুগুলির প্রয়োজন হয় $&তবে ব্যবহার করা যেতে পারে যেমন:

# assume input like '10 PRINT "Hello, World!"'
($n,$c,$x)=split/ /,$_;
/ .+ /; # $n=$`, $c=$&, $x=$'

সংক্ষিপ্ত নামের সাথে দীর্ঘ নামের সাথে সাবকে প্রতিস্থাপন করুন

যদি আপনি আপনার কোডটিতে printচার বা ততোধিক বার কল করেন (এটি স্পষ্টভাবে আপনি যে রুটিনটি কল করছেন তার দৈর্ঘ্যের সাথে পরিবর্তিত হয়), এটি একটি সংক্ষিপ্ত উপ নাম দিয়ে প্রতিস্থাপন করুন:

sub p{print@_}p;p;p;p

বনাম

print;print;print;print

শর্তসাপেক্ষ বর্ধনকারী / হ্রাসকারী প্রতিস্থাপন করুন

আপনার মতো কোড থাকলে:

$i--if$i>0

তুমি ব্যবহার করতে পার:

$i-=$i>0

পরিবর্তে কিছু বাইট সংরক্ষণ করুন।


পূর্ণসংখ্যায় রূপান্তর করুন

আপনি যদি কোনও ভেরিয়েবলকে বরাদ্দ না করে থাকেন এবং তাই ব্রেডবক্সের টিপ ব্যবহার করতে না পারেন , আপনি এই অভিব্যক্তিটি ব্যবহার করতে পারেন 0|:

rand 25 # random float eg. 19.3560355885212

int rand 25 # random int

0|rand 25 # random int

rand 25|0 # random int

~~rand 25 # random int

অ্যারে সূচকটি অ্যাক্সেস করার জন্য আপনাকে কোনও পূর্ণসংখ্যার ব্যবহার করার প্রয়োজন নেই তার চেয়ে এটি লক্ষণীয়:

@letters = A..Z;
$letters[rand 26]; # random letter

9

redoছাড়া forবা একটি ব্লকে লুপ আচরণ যুক্ত করে while{redo}একটি অসীম লুপ।


7

ফাংশন কলগুলি প্রথম বন্ধনীরূপে রাখবেন না।

পার্ল আপনাকে NAME LISTসিনট্যাক্স ব্যবহার করে একটি পরিচিত (কোর বা পূর্বনির্ধারিত) ফাংশনটিতে কল করতে দেয় । এটি আপনাকে &সিগিলটি (যদি আপনি এখনও এটি ব্যবহার করে থাকেন) পাশাপাশি প্যারেন্টেসিসগুলি ড্রপ করতে দেয় ।

উদাহরণ স্বরূপ: $v=join'',<>

সম্পূর্ণ ডকুমেন্টেশন


5

একটি অ্যাসাইনমেন্ট এক্সপ্রেশন এর মান ব্যবহার করার চেষ্টা করুন, যেমন:

# 14 characters
$n=pop;$o=$n&1

# 13 characters, saves 1
$o=($n=pop)&1

$nপার্লের 2 টি অক্ষর হওয়ায় এটি কাজ করে । আপনি বিনা ব্যয়ে পরিবর্তিত হতে পারেন , এবং 1 টি অর্ধিকালনকে কার্য বন্ধনে স্থানান্তরিত করে সংরক্ষণ $nকরতে পারেন ()


5

নেস্টেড টের্নারি লজিকের মধ্যে আপনি একাধিক বিভিন্ন বিবৃতি চালাতে পারেন।

ধরুন আপনি একটি বড় আছে if- elsifবিবৃতি। এটি কোনও যুক্তি এবং কোনও বিবৃতি হতে পারে।

if( $_ < 1 ) {
    $a=1;
    $b=2;
    $c=3;
    say $a.$b.$c;
} elsif($_ < 2 ) {
    $a=3;
    $b=2;
    $c=1;
    say $a.$b.$c;
} elsif( $_ < 3) {
    $a=2;
    $b=2;
    $c=2;
    say $a.$b.$c;
}

আপনি (cmd1, cmd2, cmd3)সমস্ত কমান্ড চালাতে টের্নারি অপারেটরের অভ্যন্তরে ব্যবহার করতে পারেন ।

$_ < 1 ?
    ($a=1,$b=2,$c=3,say$a.$b.$c):
$_ < 2 ?
    ($a=3,$b=2,$c=1,say$a.$b.$c):
$_ < 3 ?
    ($a=2,$b=2,$c=2,say$a.$b.$c):
0; #put the else here if we have one

এখানে একটি জঘন্য উদাহরণ:

perl -nE'$_<1?($a=1,$b=2,$c=3,say$a.$b.$c):$_<2?($a=3,$b=2,$c=1,say$a.$b.$c):$_<3?($a=2,$b=2,$c=2,say$a.$b.$c):0;' <(echo 2)

4

select(undef,undef,undef,$timeout)পরিবর্তে ব্যবহার করুনTime::HiRes

( Https://stackoverflow.com/a/896928/4739548 থেকে নেওয়া )

অনেক চ্যালেঞ্জগুলির জন্য আপনাকে পূর্ণসংখ্যার চেয়ে বৃহত্তর নির্ভুলতার সাথে ঘুমানো দরকার। select()এর সময়সীমা যুক্তি কেবল এটি করতে পারে।

select($u,$u,$u,0.1)

এর চেয়ে অনেক বেশি দক্ষ:

import Time::HiRes qw(sleep);sleep(0.1)

সাবেক মাত্র 20 বাইট আধুনিক 39. লাগে যেহেতু যাইহোক, সাবেক প্রয়োজন আপনি ব্যবহার করছেন না হয়, $uএবং এটি সংজ্ঞায়িত হয়নি।

আপনি যদি এটি ব্যবহার করতে যাচ্ছেন তবে অনেক আমদানি Time::HiResশোধ করে, তবে আপনার যদি কেবল একবার প্রয়োজন হয়, select($u,$u,$u,0.1)19 বাইট সংরক্ষণ করে এটি বেশিরভাগ ক্ষেত্রে অবশ্যই উন্নতি।


1

আপনার মুদ্রণ বিবৃতি সংক্ষিপ্ত করুন

চ্যালেঞ্জ অন্যথায় সুনির্দিষ্ট না করে, আপনার নতুন লাইনের পেছনের দরকার হবে না।
আমাদের 'চ্যালেঞ্জ' বলছে '0 থেকে 9 থেকে এসটিডিওউটে একটি এলোমেলো সংখ্যা আউটপুট'। আমরা এই কোডটি নিতে পারি (২৮ বাইট):

$s=int(rand(10));print"$s\n"

এবং এটি এটিকে ছোট করুন (25 বাইট):

$s=int(rand(10));print $s

কেবল ভেরিয়েবল মুদ্রণ দ্বারা। এই শেষটি কেবলমাত্র এই চ্যালেঞ্জটির জন্য বিশেষভাবে প্রয়োগ করা হয় (19 বাইট):

print int(rand(10))

কিন্তু এটি কেবল তখনই কাজ করে যখন আপনাকে অ্যাসাইনমেন্ট এবং প্রিন্টিংয়ের মধ্যে চলকটিতে কিছু করতে হবে না।


ইতিমধ্যে এখানে সর্বশেষ তালিকাভুক্ত ।
Sp3000

@ এসপি 3000 আপনাকে ধন্যবাদ, আমি আমার উত্তর আপডেট করেছি।
ASCIIThenANSI

1

স্ট্রিং লিটারেলের মতো গ্লোব ব্যবহার করুন

মাঝেমধ্যে (প্রায়শই বা চ্যালেঞ্জগুলি মোকাবেলা করার সময়) বাসা ক্ষমতা থেকে আপনি প্রচুর উপকৃত হন। সাধারণত, আপনি এটি দিয়ে এটি করতে চাই q(…)। তবে স্ট্রিংয়ের ভিতরে আপনার কী অক্ষরের প্রয়োজন তা নির্ভর করে আপনি <…>গ্লোব অপারেটরটি বাইট এবং ব্যবহার করতে সক্ষম হতে পারেন save (নোট করুন যে কোণ বন্ধনীগুলির ভিতরে থাকা কোনও ফাইল হ্যান্ডেলের মতো দেখতে পারে না এবং এটি ফাইলনামের তালিকায় প্রসারিত হওয়া বোঝায় না, যার অর্থ বেশ কয়েকটি অক্ষর সঠিকভাবে কাজ করবে না))


0

এক্সপ্রেশন রিজেসি ব্যবহার করুন।

এর সূক্ষ্ম চিত্রণটি নিম্নলিখিত কোডটি সাইন ওয়েভের ইনপুটকে আকার দিচ্ছে:

s/./print" "x(sin($i+=.5)*5+5).$&/eg;

আপনি দেখতে পাচ্ছেন যে এটি স্ট্যান্ডার্ড ইনপুটটিতে অক্ষরগুলির দ্বারা পুনরাবৃত্তি করার বেশ কমপ্যাক্ট উপায়। জিনিসগুলি কীভাবে মিলে যায় তা পরিবর্তন করতে আপনি অন্যান্য রেজেক্স ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.