একটি স্ট্রিংয়ের দৈর্ঘ্য-এনকোড


18

মনে করুন আমরা অন্য স্ট্রিং থেকে একটি স্ট্রিং টানতে নীচের নিয়মগুলি ব্যবহার করি, *এটিতে কেবল ASCII মুদ্রণযোগ্য অক্ষর রয়েছে এবং এটি একটি স্ট্রিং বলে। প্রক্রিয়াটি থামার আগে যদি স্ট্রিংটি চলে যায়, তবে এটি একটি ত্রুটি এবং প্রক্রিয়াটির ফলাফল সেই ক্ষেত্রে অপরিজ্ঞাত করা হয়েছে:

  1. শুরু করা d=1, s=""
  2. যখনই আপনি একটি এর মুখোমুখি হন *, d2 দিয়ে গুণ করুন Whenever যখনই আপনি অন্য কোনও চরিত্রের মুখোমুখি হন, এটিকে শেষের দিকে যুক্ত করুন sএবং 1 থেকে বিয়োগ করুন d। যদি এখন d=0, থামুন এবং ফিরেs

সংজ্ঞায়িত উদাহরণ :

d->d
769->7
abcd56->a
*abcd56->ab
**abcd56->abcd
*7*690->769
***abcdefghij->abcdefgh

অপরিজ্ঞাত উদাহরণ : (মনে রাখবেন যে খালি স্ট্রিং এগুলির মধ্যে একটিও হবে)

*7
**769
*7*
*a*b
*

আপনার কাজটি একটি স্ট্রিং নেওয়া এবং *সেই স্ট্রিং তৈরি করে এমন সংক্ষিপ্ততম স্ট্রিং ফিরিয়ে দেওয়া ।

প্রোগ্রাম উদাহরণ :

7->7
a->a
ab->*ab
abcd->**abcd
769->*7*69

আপনার প্রোগ্রামে কমপক্ষে একটি অক্ষর এবং কেবল অ *ASCII মুদ্রণযোগ্য অক্ষর সমন্বিত কোনও স্ট্রিং পরিচালনা করতে হবে । প্রক্রিয়াটি অপরিজ্ঞাতকৃত স্ট্রিংগুলি আপনি কখনই ফিরিয়ে দিতে পারবেন না, কারণ সংজ্ঞা অনুসারে তারা কোনও স্ট্রিং উত্পাদন করতে পারে না।

স্ট্যান্ডার্ড লুফোলস এবং আই / ও বিধি প্রযোজ্য।


আমরা কি ধরে নিতে পারি ইনপুটটি ধারণ করে না *?
লুইস মেন্ডো

3
@ ডোনমুসলি "কেবল অ-* ASCII মুদ্রণযোগ্য অক্ষরগুলি"
FryAmTheEggman

উত্তর:


3

পাইথ ( 36 27 বাইট)

9 বাইট উন্নতির জন্য জাকুবকে ধন্যবাদ! বর্তমানে কাদামাফিকের উত্তরের মতো ভাল নয় , তবে যাই হোক না কেন

KlzJ1VzWgKyJp\*=yJ)pN=tK=tJ

পরীক্ষা স্যুট

পাইথনে অনুবাদ:

                            | z=input() #occurs by default
Klz                         | K=len(z)
   J1                       | J=1
     Vz                     | for N in z:
       WgKyJ                |   while K >= J*2:
            p\*             |     print("*", end="")
               =yJ          |     J=J*2
                  )         |     #end inside while
                   pN       |   print(N, end="")
                     =tK    |   K=K-1
                        =tJ |   J=J-1

1
Muddyfish এর মৃত্যু হয়েছে বলে মনে হয় ...
Rɪᴋᴇʀ

5

জাভাস্ক্রিপ্ট (ES6), 61 বাইট

f=(s,d=2)=>s?d>s.length?s[0]+f(s.slice(1),d-2):'*'+f(s,d*2):s

রিকার্সিভ ফাংশন যা নিম্নলিখিতগুলি করে:

  • যদি dস্ট্রিং দৈর্ঘ্যের চেয়ে কম বা সমান হয় 2 দ্বারা বিভক্ত

    পরিশেষে *আউটপুট এবং সংখ্যাবৃদ্ধি d2 দ্বারা

  • অন্য:

    স্ট্রিংটি শিফট করুন এবং আউটপুটটিতে সংযোজন করুন, 1 থেকে বিয়োগ করুন d

এটি কর্মে দেখুন:

f=(s,d=2)=>s?d>s.length?s[0]+f(s.slice(1),d-2):'*'+f(s,d*2):s

input.oninput = e => output.innerHTML = f(input.value);
<input id="input" type="text"/>
<p id="output"></p>


1
শর্তটি উল্টো করে ডি বর্ধনের সাথে আরও ফাইটার বাইটের সাথে কাজ করে 2 বাইট সংরক্ষণ করুন:f=(s,d=2)=>s?d>s.length?s[0]+f(s.slice(1),d-2):'*'+f(s,d*2):s
নীল


2

সি, 125 বাইট

main(int q,char**v){++v;int i=1,n=strlen(*v);while(n>(i*=2))putchar(42);for(i-=n;**v;--i,++*v)!i&&putchar(42),putchar(**v);}

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

মূলত 2^floor(log_2(length))আপনার আউটপুট শুরুর সময় সর্বদা নক্ষত্র এবং 2^ceil(log_2(length)) - lengthঅক্ষরের পরে একটি চূড়ান্ত তারা (যদি এটি কমপক্ষে 1 টি চরিত্রের বাইরে চলে আসে) have

(সামান্য) অবারিত সংস্করণটি নিম্নরূপ

main(int q,char**v){
   ++v;                         // refer to the first command line argument
   int i=1, n=strlen(*v);       // set up iteration variables

   while(n > (i*=2))            // print the first floor(log2(n)) '*'s
      putchar(42);

   for(i-=n;  **v;  --i, ++*v)  // print the string, and the final '*'
      !i&&putchar(42),putchar(**v);
}

1

জাভাস্ক্রিপ্ট (ES6), 88 77 বাইট

f=(s,l=s.length,p=2)=>l<2?s:p<l?"*"+f(s,l,p*2):s.slice(0,p-=l)+"*"+s.slice(p)

প্রথমে আমি ভেবেছিলাম যে এটি abcdeছিল *a**bcdeকিন্তু এটি সক্রিয় যে **abc*deঠিক কাজ করে। এর অর্থ হ'ল আউটপুটটি সহজেই মেঝে (লগ (sleleth)) শীর্ষস্থানীয় তারাগুলি ব্যবহার করে তৈরি করা হয়, পাশাপাশি স্ট্রিংগুলির জন্য অতিরিক্ত তারকা যার দৈর্ঘ্য দুটির শক্তি নয়।

সম্পাদনা করুন: পুনরাবৃত্তভাবে শীর্ষস্থানীয় তারার সংখ্যা গণনা করে 8 বাইট সংরক্ষণ করা হয়েছে। দৈর্ঘ্য 1 এর বিশেষ-ক্যাসিং স্ট্রিংগুলির দ্বারা আরও 3 বাইট সংরক্ষণ করা হয়েছে, যাতে আমি তারের সাথে চিকিত্সা করতে পারি যার দৈর্ঘ্য 2 একটি অতিরিক্ত নেতৃস্থানীয় তারকা থাকার শক্তি power


0

হাস্কেল, 68 বাইট

f d[]=""
f d xs|length xs>=d*2='*':f(d*2)xs
f d(x:xs)=x:f(d-1)xs

অন্যান্য উত্তর হিসাবে একই, সত্য। যদি EOF, একটি খালি স্ট্রিং আউটপুট। দৈর্ঘ্য যদি দ্বিগুণের বেশি হয় তবে dএকটি তারা এবং ডাবল আউটপুট নিন d। অন্যথায়, পরবর্তী অক্ষর আউটপুট এবং একটি থেকে বিয়োগ d

Ungolfed:

f d (  [])                    = ""
f d (  xs) | length xs >= d*2 = '*' : f (d*2) xs
f d (x:xs)                    =  x  : f (d-1) xs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.