একটি পূর্ণসংখ্যা দেওয়া হয়েছে, এর লেভেনস্টাইন কোড গণনা করুন


10

দাবি অস্বীকার: লেভেনস্টাইন কোডিং লেভেনস্টাইন সম্পাদনা দূরত্বের মেট্রিকের সাথে সম্পূর্ণ সম্পর্কিত নয় ।

<লেভেনস্টাইন কোড কেন এখানে গণনা করা দরকার সে সম্পর্কে দীর্ঘ গল্প Inোকান>

কোড

লেভেনস্টেইন কোডিং হ'ল ননেজেটিভ ইন্টিজারগুলিকে বাইনারি কোড বরাদ্দ করার একটি ব্যবস্থা যা সম্ভাবনার কিছু অদ্ভুত সম্পত্তি বজায় রাখে যা এই চ্যালেঞ্জের জন্য প্রাসঙ্গিক নয়। আমরা এই কোডটি এল ( এন ) হিসাবে চিহ্নিত করব । উইকিপিডিয়া এটিকে পাঁচ-পদক্ষেপের প্রক্রিয়া হিসাবে বর্ণনা করে:

  1. ধাপ গণনা ভেরিয়েবল সি থেকে শুরু করে 1 করুন।
  2. 1কোডের শুরুতে নেতৃত্ব না দিয়ে সংখ্যার বাইনারি উপস্থাপনাটি লিখুন ।
  3. দ্বিতীয় ধাপে লিখিত বিটের সংখ্যা এম হতে দিন ।
  4. যদি এম 0 না হয়, ইনক্রিমেন্ট সি হয় , তবে দ্বিতীয় নম্বরটি এম থেকে নতুন নম্বর হিসাবে পুনরাবৃত্তি করুন ।
  5. কোডের শুরুতে সি 1 বিট এবং একটি লিখুন 0

তবে কোডটি পুনরাবৃত্তভাবে বর্ণনা করা যায়:

  1. যদি সংখ্যা 0 হয় তবে তার কোডটি 0
  2. 1কোডের শুরুতে নেতৃত্ব না দিয়ে সংখ্যার বাইনারি উপস্থাপনাটি লিখুন ।
  3. দ্বিতীয় ধাপে লিখিত বিটের সংখ্যা এম হতে দিন ।
  4. কোডের শুরুতে এল ( এম ) লিখুন ।
  5. 1কোডের শুরুতে কিছুটা লিখুন ।

যারা উদাহরণ পছন্দ করেন তাদের জন্য, এখানে এল (87654321) এর পুনরাবৃত্ত প্রক্রিয়াটি বোঝানো হয়েছে :

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি সংখ্যা এন দেওয়া হয়েছে, যে কোনও যুক্তিসঙ্গত বিন্যাসে বিটস্ট্রিং এল ( এন ) কে আউটপুট করবে (এতে বিট বিট সহ একটি নম্বর ফিরিয়ে দেওয়া অন্তর্ভুক্ত)। স্ট্যান্ডার্ড লুফোলগুলি বরাবরের মতো অনুমোদিত নয়।

উদাহরণ

ইনপুট: 5

আউটপুট: 1110001

ইনপুট: 30

আউটপুট: 111100001110

ইনপুট: 87654321

আউটপুট: 111110000101001001110010111111110110001

ইনপুট: 0

আউটপুট: 0

উত্তর:


2

জেলি , 13 11 বাইট

Ḣ;LÑ$;
BÇṀ¡

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

জমাটিতে পারস্পরিক পুনরাবৃত্ত লিঙ্কগুলির একটি জুটি থাকে।

BÇṀ¡    Main link. Argument: n

B       Convert n to binary.
   ¡    Execute...
 Ç        the helper link...
  Ṁ       m times, where m is the maximum of n's binary digits.

Ḣ;LÑ$;  Helper link. Argument: A (array of binary digits)

Ḣ       Head; remove and return the first element of A.
    $   Combine the two links to the left into a monadic chain.
  L       Yield the length (l) of A without its first element.
   Ñ      Call the main link with argument l.
 ;      Concatenate the results to both sides.
     ;  Append the tail of A.

8

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

b 0=[]
b n=b(div n 2)++[mod n 2]
f 0=[0]
f n|1:t<-b n=1:f(length t)++t

একটি ফাংশন সংজ্ঞা দেয় f : Int -> [Int]। উদাহরণস্বরূপ f 5 == [1,1,1,0,0,0,1],।



4

গণিত, 61 বাইট

f@0={0};f@n_:=Join[{1},f@Length@#,#]&@Rest@IntegerDigits[n,2]

1
আমি নিশ্চিত যে আপনি ±একটি ফাংশন পরিবর্তে একটি unary অপারেটর সংজ্ঞায়িত দ্বারা কিছু বাইট সংরক্ষণ করতে পারেন f
মার্টিন ইন্ডার

3

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

f=n=>(s=n.toString(2)).replace(1,_=>1+f(s.length-1))
<input type=number oninput=o.textContent=f(+this.value)><pre id=o>

সম্পাদনা করুন: @ আরনল্ডকে 2 বাইট সংরক্ষণ করা হয়েছে


আমি মনে করি আপনি => 52 বাইটের replace(1,...পরিবর্তে নিরাপদে ব্যবহার করতে পারবেনreplace(/1/,...
আর্নাউল্ড

2

পাইথ, 12 বাইট

L&bX1.Bbyslb

প্রদর্শন

( yশেষে প্রান্তটি ইনপুটটিতে ফলাফল ফাংশন চালানো হয়)

ব্যাখ্যা:

L&bX1.Bbyslb
L               def y(b):
 &b             If b is 0, return 0. This is returned as an int, but will be cast
                to a string later.
          lb    Take the log of b
         s      Floor
        y       Call y recursively
   X1           Insert at position 1 into
     .Bb        Convert b to binary.

1

এসকিউএফ, 110

পুনরাবৃত্তি ফাংশন:

f={params[["i",0],["l",[]]];if(i<1)exitWith{[0]};while{i>1}do{l=[i%2]+l;i=floor(i/2)};[1]+([count l]call f)+l}

যেমন কল করুন: [NUMBER] call f

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

( এই টিকিট এখানে )


0

পিএইচপি, 116 114 বাইট

<?$f=function($i)use(&$f){$b=decbin($i);return!$b?0:preg_replace('/^1/',1 .$f(~~log10($b)),$b);};echo$f($argv[1]);

প্রথম যুক্তি হিসাবে নম্বর সরবরাহ করুন।

হালনাগাদ:

  • প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষিত strlen($b)-1সঙ্গে ~~log10($b)ভিন্নভাবে concatenating দ্বারা অন্য (পরিশেষে বোঝা কেন সবাই অন্য লগারিদম ব্যবহার ছিল না) এবং।


0

জাভা 8 (সম্পূর্ণ প্রোগ্রাম), 257 249 বাইট

interface M{static void main(String[]a)throws Exception{int i=0,j;while((j=System.in.read())>10)i=i*10+j-48;System.out.print(L(i));}static String L(int i){if(i==0)return "0";String s=Integer.toString(i,2);return "1"+L(s.length()-1)+s.substring(1);}}

পঠনযোগ্য সংস্করণ ডাব্লু / ব্যাখ্যা (এটি বেশিরভাগ ক্ষেত্রে কেবল পুনরাবৃত্তি):

interface M {
    static void main(String[]a) throws Exception { // Using Exception is unadvised in real coding, but this is Code Gold
        int i = 0, j; // i stores the input; j is a temporary variable
        while ((j = System.in.read()) > 10) // Read the input to j and stop if it is a newline. Technically this stops for tabulators as well, but we shouldn't encounter any of those...
            i = i * 10 + j - 48; // Looping this step eventually reads the whole number in from System.in without using a reader (those take up a lot of bytes)
        System.out.print(L(i)); // Make a method call
    }

    static String L(int i) { // This gets the actual Levenshtein Code
        if (i == 0)
            return "0"; // The program gets a StackOverflowException without this part
        String s = Integer.toString(i, 2); // Shorter than toBinaryString
        return "1" + L(s.length() - 1) + s.substring(1); // Write in the first character (which is always a one), followed by the next L-code, followed by the rest of the binary string
    }
}

সম্পাদনা 1 : 8 টি বাইট সংরক্ষিত : বাইনারি স্ট্রিংয়ের প্রথম অক্ষর সর্বদা 1; অতএব, ব্যবহার না করে বরং s.charAt(0)আরও ভাল বিকল্পটি সহজ "1"

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