ভিমে আপনি কোনও কমান্ডের সংখ্যার সাথে পূর্ববর্তী করে পুনরাবৃত্তি করতে পারেন, এর 3dd
সমতুল্য dd dd dd
। ভাল, এই পুনরাবৃত্তি প্যাটার্নটি Vim কমান্ডগুলির মধ্যে সীমাবদ্ধ নয়। স্ট্রিংটিও এইভাবে প্রতিলিপি করা যেতে পারে।
স্পেসিফিকেশন:
একটি স্ট্রিং দেওয়া হয়েছে, কেবলমাত্র অঙ্ক, বর্ণানুক্রমিক অক্ষর (উভয় উচ্চ-কেস এবং লোয়ার-কেস) এবং ফাঁকা স্থানগুলি, ইনপুট হিসাবে একটি alচ্ছিক ট্রেইলিং নিউলাইন সহ, একটি প্রোগ্রাম লিখুন যা নিম্নলিখিত কাজটি করে:
প্রতিটি "শব্দ" এর মধ্যে অঙ্ক এবং বর্ণমালা থাকে। কোনও বর্ণের আগে যদি কোনও সংখ্যার আগে থাকে (কোনও সংখ্যায় একাধিক সংখ্যা হতে পারে, বা সংখ্যাটি শূন্য হয়), নির্দিষ্ট সময়ের জন্য সেই চিঠিটি পুনরাবৃত্তি করুন। উদাহরণ স্বরূপ:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
শব্দ স্পেস দ্বারা পৃথক করা হয়। প্রতি দুটি সংলগ্ন শব্দের মধ্যে সর্বাধিক এক স্পেস রয়েছে।
সহজ, তাই না? অতিরিক্ত জিনিস এখানে:
জায়গার আগে যদি সংখ্যা থাকে তবে প্রদত্ত সময়ের জন্য পরবর্তী শব্দটি পুনরাবৃত্তি করুন। নম্বরটি সর্বদা পূর্ববর্তী শব্দের শেষে বা স্ট্রিংয়ের শুরুতে সংযুক্ত থাকবে। উদাহরণ:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
যদি খালি শব্দের পুনরাবৃত্তি করা উচিত তবে এক সারি একাধিক স্পেস আউটপুট করবেন না। তাদের স্কোয়াশ:
a3 0x2 b -> a b b # NOT 'a b b'
অন্য কথায়, আপনার প্রোগ্রামটি কখনই দুটি স্থান একসাথে আউটপুট করা উচিত নয়।
ইনপুট কখনই খালি থাকে না, তবে আউটপুটটি খালি খালি হওয়া প্রয়োজন হয় না:
0 3x -> (empty)
ইনপুট এবং আউটপুট যে কোনও পছন্দসই পদ্ধতিতে নেওয়া যেতে পারে। আর্গুমেন্ট থেকে ইনপুট নেওয়া এবং রিটার্ন মানগুলির মাধ্যমে আউটপুট প্রদান করা একটি ফাংশনও গ্রহণযোগ্য।
যদি এটি কোনও প্রোগ্রাম হয় তবে এটি ত্রুটি সহ প্রস্থান করতে হবে না (অর্থাত্ ফেরতের মান শূন্য)।
সংখ্যাগুলি সর্বদা দশমিক হয়, এবং কখনই শূন্যের সাথে শুরু হয় না, যদি না সংখ্যাটি নিজেই শূন্য হয়, এক্ষেত্রে কেবল একটি শূন্য থাকে। অর্থাৎ আপনাকে ইনপুট হিসাবে বিবেচনা করার
077a
বা দেওয়ার দরকার নেই000a
।সমস্ত সংখ্যা 2 ^ 31 (2,147,483,648) এর নীচে। সর্বাধিক আউটপুট দৈর্ঘ্য 2 ^ 32 (4,294,967,296) বাইটের নিচে।
প্রোগ্রামটি optionচ্ছিকভাবে একটি ট্রেলিং স্পেস এবং / অথবা একটি ট্রেলিং নতুন লাইনের আউটপুট দিতে পারে। এই স্থান এবং নিউলাইন আউটপুট এর বৈধতা প্রভাবিত করে না। এমনকি সঠিক আউটপুট খালি হওয়া উচিত, একটি নতুন লাইনের পরে একটি স্থানের আউটপুট যোগ্যতা অর্জন করবে।
সংক্ষেপে, একটি বৈধ ইনপুট এই নিয়মিত প্রকাশের সাথে মেলে:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
এবং একটি বৈধ আউটপুট জন্য:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
নমুনা পরীক্ষার কেস:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
এটি একটি কোড-গল্ফ , তাই প্রতিটি ভাষার বাইটে সংক্ষিপ্ততম প্রোগ্রামটি জিততে পারে!
a3 0xc b
-> এর মতো একটি পরীক্ষা a c c c b
যুক্ত করা উচিত, কারণ আমার কাছে প্রাথমিকভাবে এমন কোড ছিল যা উপরের সমস্ত পরীক্ষার ক্ষেত্রে কাজ করেছিল, তবে সেটির জন্য সঠিকভাবে কাজ করে নি।