xkcd- স্টাইল পৃষ্ঠা নম্বর


65

র‌্যান্ডাল মুনরোর বই "xkcd, ভলিউম 0" পৃষ্ঠা সংখ্যাগুলির জন্য একটি বিপরীত নম্বর সিস্টেম ব্যবহার করে। প্রথম কয়েকটি পৃষ্ঠাগুলি নম্বর

1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...

এই তিন মত একটি বিট দেখায়, কিন্তু লক্ষ্য যে, তিনি থেকে অগ্রাহ্য 20সোজা 100থেকে 120থেকে 200থেকে 200থেকে 1000। এই ক্রমটি সংজ্ঞায়িত করার একটি উপায় বলতে পারা যায় যে এটি সমস্ত বার্ষিক সংখ্যা গণনা করে যা তার পরে সর্বাধিক এক 2এবং কোনওটি থাকে । আপনি এএআইআইএস এ এএন 6993 এ এ এটি পেতে পারেন । এই নম্বর সিস্টেমটি স্কিউ বাইনারি হিসাবে পরিচিত ।12

আপনার কাজটি হ'ল Nএই নম্বর সিস্টেমে প্রদত্ত ইতিবাচক পূর্ণসংখ্যার প্রতিনিধিত্ব সন্ধান করা ।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

আউটপুট একটি স্ট্রিং, স্কিউ বাইনারি প্রতিনিধিত্বের সমান দশমিক প্রতিনিধিত্ব সহ একটি সংখ্যা বা অঙ্কের তালিকা (পূর্ণসংখ্যা বা অক্ষর / স্ট্রিং হিসাবে) হতে পারে। আপনাকে অবশ্যই নেতৃস্থানীয় শূন্যগুলি ফিরিয়ে দেওয়া উচিত নয়।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

মজাদার ঘটনা: এই নম্বর সিস্টেমটিতে আসলে কিছু যোগ্যতা রয়েছে। কোনও সংখ্যা বাড়ানোর সময়, আপনি সর্বদা সর্বাধিক দুটি সংলগ্ন অঙ্ক পরিবর্তন করবেন - আপনাকে কখনই পুরো সংখ্যার মাধ্যমে পরিবর্তনটি বহন করতে হবে না। সঠিক উপস্থাপনা যা ও (1) এ ইনক্রিমেন্টিংয়ের অনুমতি দেয়।

পরীক্ষার মামলা

1 => 1
2 => 2
3 => 10
6 => 20
7 => 100
50 => 11011
100 => 110020
200 => 1100110
1000 => 111110120
10000 => 1001110001012
100000 => 1100001101010020
1000000 => 1111010000100100100
1048576 => 10000000000000000001

1000000000000000000 => 11011110000010110110101100111010011101100100000000000001102

আমি সবচেয়ে সংক্ষিপ্ত উত্তরের জন্য একটি অনুগ্রহ দেব যা শেষ পরীক্ষার কেস (এবং অনুরূপ বিশালতার কোনও অন্য ইনপুট, তাই এটি হার্ডকোডিং সম্পর্কে চিন্তা করবেন না) এক সেকেন্ডেরও কম সময়ে সমাধান করবে।

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন। এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

<script>site = 'meta.codegolf'; postID = 5314; isAnswer = true; QUESTION_ID = 51517</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


32
প্রথমবার প্রকাশিত হওয়ার পর থেকে আমি বইটি পেয়েছি এবং পৃষ্ঠা নম্বরটি কখনই লক্ষ্য করে নি।
অ্যালেক্স এ।

2
@AlexA। আমি এটি আমার কিন্ডলে রেখেছি যেখানে আপনি কোনও আকর্ষণীয় পৃষ্ঠা নম্বর করতে পারবেন না।
লিজিয়নম্যামাল978

21
@ লিজিয়নম্যামাল978: ট্র্যাজিক।
অ্যালেক্স এ।

1
@ সুপারজেডি ২২৪ Conকমত্যটি মনে হচ্ছে না , তাই দুঃখিত (আমি যদি languageক্যমত্য থেকে এক ব্যতিক্রম করে থাকি তবে এটি যদি আপনার ভাষা পরিচালনা করতে পারে তবে এটি তেমন মনে হয় না)।
মার্টিন এন্ডার

4
এটি আমাকে স্মরণ করিয়ে দেয় যে আমি যখন ৩ বছর ছিলাম তখন আমি কীভাবে গণনা করতাম I আমি যুক্তি দিয়েছিলাম: "পঞ্চান্নের কোনও নেই, সুতরাং একশো-নয়টির পরে অবশ্যই দু'শো হওয়া উচিত।" অতিরিক্ত 0 দিয়ে 59->60এবং এর মধ্যে পার্থক্যটি দেখে আমি কেবল নিজের ভুলটি উপলব্ধি করেছিলাম109->110
সাইয়েস

উত্তর:


12

পাইথ, 17 বাইট

Ljb3ye.f!-P-yZ01Q

এটি কিছুটা হাস্যকরভাবে ধীর - O(output^log_2(3))। এটি ইনপুটটির দৈর্ঘ্যে ক্ষতিকারক, তবে পৃষ্ঠার উত্তরগুলির মতো, দ্বিগুণ ঘনিষ্ঠ নয়। @ ডেনিসের উত্তর থেকে কিছু ধারণা নেওয়া হয়েছে , এখানে

প্রদর্শন.

এটি .fপাইথের "এন ম্যাচগুলি না পাওয়া পর্যন্ত লুপ" ফাংশনটি ব্যবহার করে।


32

সিজেম, 24 23 22 21 19 বাইট

ri_)2b,,W%{2\#(md}/

এটি একটি ও (লগ এন) পদ্ধতির, যেখানে এন ইনপুট, যা তাত্ক্ষণিকভাবে শেষ পরীক্ষার কেসটি সম্পন্ন করে। অঙ্ক 1 এর মান দ্বারা মডুলার বিভাগ ব্যবহার করে এটি এন কে সরাসরি স্কিউ বাইনারিতে রূপান্তরিত করে ।

এই কোড একটি ত্রুটি জাভা ব্যাখ্যাকারী, যা অনুযায়ী অনুমোদিত হয় সঙ্গে stderr যায় যে সঙ্গে শেষ মেটা উপর ঐক্যমত্য

আপনি যদি সিজেএম ইন্টারপ্রেটারে এই কোডটি ব্যবহার করে থাকেন তবে আউটপুটের শেষ লাইন ছাড়া সমস্ত কিছু উপেক্ষা করুন।

2 বাইট ব্যয়ে, প্রিপেন্ড 2>করে ত্রুটিটি দূর করা যায় W%

এক বাইট বন্ধ করে দেওয়ার জন্য @ মার্টিনব্যাটনারকে ধন্যবাদ।

পটভূমি

স্কিউ বাইনারি উপস্থাপনা একটি কে ... একটি 0 পূর্ণসংখ্যার সাথে n = (2 কে + 1 -1) এর কে + + + + (2 1 -1) a 0 এর সাথে সামঞ্জস্য করে ।

যেহেতু উভয়ই (2 কে -1) + ... + (2 1 -1) = 2 কে + 1 - (কে + 2) এবং (2 কে -1) + ... + 2 (2 জে -1) = 2 ট + 1 টি - (2 ঞ + 1 টি - 2 + K + 1 টি) কম 2 ট + 1 টি -1 , মান একটি করার একটি 0 দ্বারা ধারাবাহিক মডুলার ডিভিশন উদ্ধার করা সম্ভব 2 ট + 1 টি -1 , 2 কে -1 , ইত্যাদি।

শুরু করার জন্য, আমাদের প্রথমে 2 কে + 1 -1 এর মানটি খুঁজে বের করতে হবে । যেহেতু n সর্বাধিক 2 (2 কে + 1 -1) হয় তাই পূর্ণসংখ্যা এন + 1 অবশ্যই 2 কে + 2 এর চেয়ে কড়া হওয়া উচিত ।

সুতরাং, এর বাইনারি লগারিদম এর পূর্ণসংখ্যা অংশগ্রহণ করার এন + 1 টি উৎপাদ ট + 1 টি

পরিশেষে, আমরা লক্ষ্য করি যে পূর্ণসংখ্যা n + 1 এর বেস 2 তে অলগ 2 (এন + 1) s সংখ্যা রয়েছে।

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

ri    e# Read an integer N from STDIN.
2b,   e# Push the number of binary digits of N + 1, i.e, K + 2 = log(N + 1) + 1.
,W%   e# Push the range [K+1 ... 0].
{     e# For each J in the range:
  2\# e#   J -> 2**J
  (   e#     -> 2**J - 1
  md  e#   Perform modular division of the integer on the stack (initially N)
      e#   by 2**J - 1: N, 2**J - 1 -> N/(2**J - 1), N%(2**J - 1)
}/    e#

শেষ দুটি পুনরাবৃত্তিতে, আমরা 1 এবং 0 দ্বারা মডিউলার বিভাগ সম্পাদন করি । প্রথমটি স্ট্যাকের উপর একটি অযাচিত 0 ঠেলে দেয় । সম্পাদন করার সর্বশেষ প্রচেষ্টা 0 0 md, যা স্ট্যাক থেকে অবাঞ্ছিত 0 টি উভয়কেই সরিয়ে দেয়, কিছু না দেওয়ার পরিবর্তে তত্ক্ষণাত উপস্থিত হয় এবং স্ট্যাকটি স্টাডোউটে ফেলে দেয়।


28

পাইথন 2, 67 বাইট

def f(n):x=len(bin(n+1))-3;y=2**x-1;return n and n/y*10**~-x+f(n%y)

প্রদত্ত পরীক্ষার ক্ষেত্রে কাজ করার জন্য মনে হচ্ছে। যদি আমি এই অধিকার পেয়েছি O(place values set in output), এটি প্রায় হওয়া উচিত , সুতরাং এটি সহজেই শেষ কেসটি করে।

কল করুন f(100)। স্কিউ বাইনারি সমান দশমিক প্রতিনিধিত্ব করে।

পাইথন 3, 65 বাইট

def g(n,x=1):*a,b=n>x*2and g(n,x-~x)or[n];return a+[b//x,b%x][:x]

সামান্য কম দক্ষ তবে এখনও লগারিদমিক, তাই শেষ কেসটি তাত্ক্ষণিক।

কল করুন g(100)। অঙ্কের একটি তালিকা ফেরত দেয়।


2and3 এ সংকলন করে ? আমি 2 এ আছি এবং 2and2একটি সিনট্যাক্স ত্রুটি ছুড়ে
দিচ্ছি

3
@ ট্যানকোরস্যামশ 2and2কাজ করবে না কারণ এটি পার্স করা হবে 2 and2- চেষ্টা করুন 2and 2, আপনার পাইথনের ভার্সনটি যথেষ্ট নতুন হলে (পাইথন
২.7.১০ এ

ওহ, আপনি ঠিক বলেছেন। এমনকি 2.7.3 এ এটি কাজ করে।
ট্যানকোরস্যামশ

12

সিজেম, 22 21 20 বাইট

ri_me,3fb{0-W<1-!},=

এটি একটি ও (ই এন এন) পদ্ধতির, যেখানে এন ইনপুট। এটা প্রথম তালিকাবদ্ধ ⌊e এন অ নেতিবাচক বেস 3 ইন্টিজার, ঐ আছে ঘটিয়েছে 2 s অথবা 1 প্রথম পর গুলি 2 (যদি থাকে) এবং নির্বাচন এন +1

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

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

ri    e# Read an integer N from STDIN.
_me,  e# Push [0 ... floor(exp(N))-1].
3fb   e# Replace each integer in the range by the array of its digits in base 3.
{     e# Filter; for each array A:
  0-  e#   Remove all 0's.
  W<  e#   Remove the last element.
  1-  e#   Remove all 1's.
  !   e#   Logical NOT. Pushes 1 iff the array is empty.
},    e#   If ! pushed 1, keep the array.
=     e# Select the (N+1)th element of the filtered array.

9

পাইথ, 20 বাইট

Jt^2hslhQ#p/=%QJ=/J2

চূড়ান্ত পরীক্ষার ক্ষেত্রে এক সেকেন্ডের অধীনে (লগ (ইনপুট ())) এ চলে। ত্রুটি লুপ হওয়া অবধি একটি রান প্রায় তৈরি। কোনও পূর্ববর্তী নিউলাইন নেই।

প্রদর্শন.

ব্যাখ্যা:

Jt^2hslhQ#p/=%QJ=/J2
                        Implicit: Q is the input.
      lhQ                          log(Q+1,2)
     slhQ                    floor(log(Q+1,2))
    hslhQ                    floor(log(Q+1,2))+1
  ^2hslhQ                 2^(floor(log(Q+1,2))+1)
 t^2hslhQ                 2^(floor(log(Q+1,2))+1)-1
Jt^2hslhQ               J=2^(floor(log(Q+1,2))+1)-1
         #              until an error is thrown:
            =%QJ        Q=Q%J
                =/J2    J=J/2
           /            The value Q/J, with the new values of Q and J.
          p             print that charcter, with no trailing newline.

জে সবচেয়ে ছোট স্কিউ বাইনারি অঙ্কের অবস্থানের মান থেকে শুরু করা হয়েছে যা ইনপুটটির চেয়ে বড়। তারপরে, প্রতিটি সময় লুপের মাধ্যমে আমরা নিম্নলিখিতগুলি করি:

  • মানের প্রতিটি অঙ্ক সরান Jথেকে Qসঙ্গে =%QJ। উদাহরণস্বরূপ, যদি আপনার Q=10এবং J=7, Qহয়ে 3, থেকে স্কিউ বাইনারি পরিবর্তন অনুরূপ যা 110করতে 10। প্রথম পুনরাবৃত্তিতে এটির কোনও প্রভাব নেই।
  • Jএর সাথে পরবর্তী ছোট স্কিউ বাইনারি বেস মানটিতে পরিবর্তন করুন =/J2। এই 2 দ্বারা বিভাজন ধরাশায়ী পরিবর্তনে, J=7করতে J=3, উদাহরণস্বরূপ। কারণ প্রথম Jঅঙ্কটি আউটপুট হওয়ার আগে এটি ঘটে, প্রয়োজনের তুলনায় এক অঙ্কের অবস্থান আরও বেশি হয়।
  • /QJ(কার্যকরভাবে) এর সাথে আসল অঙ্কের মানটি সন্ধান করুন ।
  • pপেছনের নিউলাইনটি এড়াতে পাইথের ডিফল্ট মুদ্রণের পরিবর্তে মানটি মুদ্রণ করুন ।

এই লুপটি Jশূন্য হয়ে না যাওয়া পর্যন্ত পুনরুক্ত হবে, যেখানে শূন্য ত্রুটির দ্বারা একটি বিভাজন নিক্ষেপ করা হবে এবং লুপটি শেষ হবে।


8

ES6, 105 বাইট

f=n=>{for(o=0;n--;c?o+=Math.pow(3,s.length-c):o++)s=t(o),c=s.search(2)+1;return t(o);},t=a=>a.toString(3)

ব্যবহার হল: f(1048576)=> 100 "1000000000000000000001"

আপনার নিজের বিপদে শেষ যুক্তি পরীক্ষা করুন। আমি 5 সেকেন্ড পরে ছেড়ে দিলাম।

এবং মন্তব্য সহ সুন্দর মুদ্রণ!

f=n=>{ //define function f with input of n (iteration)
    for(o=0; //define o (output value in decimal)
        n--; //decrement n (goes towards falsy 0) each loop until 0
        c?o+=Math.pow(3,s.length-c):o++) //if search finds a 2, increment output by 3^place (basically moves the 2 to the left and sets the place to 0), else ++
        s=t(o), //convert output to base 3      
        c=s.search(2)+1; //find the location of 2, +1, so a not-found becomes falsy 0.
    return t(o); //return the output in base 3
},

t=a=>a.toString(3);  //convert input a to base 3

5
বিটিডাব্লু, নামবিহীন ফাংশনগুলি পুরোপুরি গ্রহণযোগ্য, সুতরাং আপনার প্রয়োজন নেই f=
মার্টিন ইন্ডার

2
-16 বাইট:f=n=>{for(o=0;~n--;o+=c?Math.pow(3,s.length+c):1)s=o.toString(3),c=~s.search(2);return s}
nderscore

@nderscore প্রেটি দুর্দান্ত: ডি
কম্পাস

1
-7 বাইট আপনি ES7 ব্যবহার করুন: প্রতিস্থাপন Math.pow(3,s.length+c)সঙ্গে 3**(s.length+c)
গুস্তাভো রডরিগস

3
@ গুস্তাওরোডরিগগুলি আমি ইএস 6 শিখতেও শেষ করি নি! @ _ @
কমাস

7

রেটিনা, 55 বাইট

^
0a
(+`12(.*a)1
20$1
0?2(.*a)1
10$1
0a1
1a
)`1a1
2a
a
<empty line>

আনারি ইনপুট নেয়।

প্রতিটি লাইনের নিজস্ব ফাইলে যাওয়া উচিত তবে আপনি -sপতাকা সহ একটি ফাইল হিসাবে কোড চালাতে পারেন । উদাহরণ:

> echo 11111|retina -s skew
12

পদ্ধতি: স্ট্রিং থেকে শুরু করে স্ট্রিং ইনপুট নম্বর বারে ইনক্রিমেন্টেশন কার্যকর করে 0

আমরা নিম্নলিখিত বর্ধিত নিয়ম ব্যবহার করি:

  • যদি থাকে 2: ^2 -> ^12; 02 -> 12;12 -> 20
  • যদি থাকে না 2: 0$ -> 1$;1$ -> 2$

( 2স্ট্রিংয়ের সর্বাধিক এক থাকতে পারে ; ^এবং $নিয়মে স্ট্রিংয়ের শুরু এবং শেষ চিহ্নিত করে))

রেটিনা সম্পর্কে আরও তথ্য।


7

জাভা, 154 148

n->{String s="0";for(;n-->0;)s=s.contains("2")?s.replaceAll("(^|0)2","10").replace("12","20"):s.replaceAll("1$","2").replaceAll("0$","1");return s;}

এই উত্তরটি একটি একক বেনামে ফাংশন রূপ নেয় যা একটি পূর্ণসংখ্যার যুক্তি নেয় এবং উত্তরটি স্ট্রিং হিসাবে ফিরিয়ে দেয়। নীচে এই সমাধানটি পরীক্ষার জন্য একটি সম্পূর্ণ শ্রেণি রয়েছে।

import java.util.function.Function;
public class Skew {
    public static void main(String[] args){
        Function<Integer,String> skew = n->{String s="0";for(;n-->0;)s=s.contains("2")?s.replaceAll("(^|0)2","10").replace("12","20"):s.replaceAll("1$","2").replaceAll("0$","1");return s;};

        for(String s:args){
            System.out.println(skew.apply(Integer.parseInt(s)));
        }
    }
}

5

বাশ + কোর্টিলস, 52

dc -e3o0[r1+prdx]dx|grep -v 2.\*[12]|sed -n $1{p\;q}

এটি একটি নিষ্ঠুর-জালিয়াতি, সুতরাং এটি বৃহত্তর সংখ্যার জন্য বরং ধীর।

আউটপুট:

$ ./xkcdnum.sh 1000
111110120
$ 

5

জাভা, 337 335 253 246 244 বাইট

একটি পদ্ধতি যা সূচকে এক হিসাবে গ্রহণ করে longএবং ফলাফলটিকে স্ট্রিং হিসাবে ফেরত দেয়

longসূচকের জন্য একটি ব্যবহার করে যাতে তাত্ত্বিকভাবে শেষ পরীক্ষার কেসটি পরিচালনা করতে পারে তবে আমি সত্যিই এটির পরামর্শ দেব না।

String f(long i){List<Long>l=new ArrayList<>();l.add(0L);for(;i-->0;){int j=l.indexOf(2);if(j!=-1){l.set(j,0L);if(j==0){l.add(0,1L);}else{l.set(j-1,l.get(j-1)+1);}}else{j=l.size()-1;l.set(j,l.get(j)+1);}}String s="";for(long q:l)s+=q;return s;}

4
আপনি এটি পুরো প্রোগ্রামের পরিবর্তে একটি ফাংশন করে (এবং কোনও স্ক্যানারের পরিবর্তে আর্গুমেন্ট হিসাবে ইনপুট নিয়ে) এটিকে কিছুটা ছোট করতে পারেন।
জিওবিটস

2
আপনার if(j == 0) বিবৃতিতে চার ধনুর্বন্ধনী প্রয়োজন নেই (চার বাইট)। আপনাকে ঘোষণা করার দরকার নেই k; আপনি কেবল jআবার ব্যবহার করতে পারেন (আরও চারটি)। আপনি আপনার তালিকা ঘোষণায় ( new ArrayList<>();) আরও জেনেরিক ধরণের অনুক্রম ব্যবহার করতে পারেন ( ) আরও 4)
durron597

4

হাস্কেল, 73 72

1 বাইটের জন্য @ নিমিকে ধন্যবাদ!

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

i(2:b)=1:0:b
i[b]=[b+1]
i(b:2:c)=b+1:0:c
i(b:c)=b:i c
s=(iterate i[0]!!)

এই সমাধানটি একটি বরং নিষ্পাপ পদ্ধতি যা n0 nবার বাড়িয়ে স্কিউ বাইনারি সংখ্যা গণনা করে ।


4

সিজেম, 24 বাইট

Q{0\+2a/())+a\+0a*}ri*si

এটি একটি ও (এন লগ এন) পদ্ধতির, যেখানে এন ইনপুট। এটি 0 এর স্কিউ বাইনারি উপস্থাপনার সাথে শুরু হয় এবং একই সংখ্যার এন বার বৃদ্ধি করে ।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

পটভূমি

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

  1. একটি 0 দ্বারা একটি ইভেন্ট 2 প্রতিস্থাপন ।

  2. যদি 2 টি প্রতিস্থাপন করা হয়, তবে তার বামে অঙ্ক বাড়ান।

    অন্যথায়, শেষ অঙ্কটি বৃদ্ধি করুন।

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

Q     e# Push an empty array.
{     e# Define an anonymous function:
  0\+ e#   Prepend a 0 to the array.
  2a/ e#   Split the array at 2's.
  (   e#   Shift out the first chunk of this array.
  )   e#   Pop the last digit.
  )+  e#   Increment it and append it to the array.
  a\+ e#   Prepend the chunk to the array of chunks.
  0a* e#   Join the chunks, using [0] as separator.
      e#   If there was a 2, it will get replaced with a 0. Otherewise, there's
      e#   only one chunk and joining the array dumps the chunk on the stack.
}     e#
ri*   e# Call the function int(input()) times.
si    e# Cast to string, then to integer. This eliminates leading 0's.

4

ভিবিএ, 209 147 142 বাইট

Sub p(k)
For i=1To k
a=StrReverse(q)
If Left(Replace(a,"0",""),1)=2Then:q=q-2*10^(InStr(a,2)-1)+10^InStr(a,2):Else:q=q+1
Next
msgbox q
End Sub

আমার গণিত অদক্ষ এবং আমার গল্ফ কাজ ব্যবহার করতে পারে। তবে এটি পোগিতে আমার প্রথম প্রচেষ্টা এবং ভেবেছিলাম আমি এটি ব্যবহার করে দেখি। যদিও ব্রুট ফোর্স সাজান।

শেষ অঙ্কটি 2 না হলে এটি কেবল 1 দ্বারা গণনা করা হয় 2 এরপরে পিছনে পিছনে 10 পদক্ষেপের দিকে এগিয়ে যায় Plus

এটি 65534 এ কাজ করা বন্ধ করে দেয় কারণ ভিবিএ বৈজ্ঞানিক স্বরলিপিতে আউটপুট দেওয়ার জন্য জোর দেয়, তবে যুক্তিটি আরও বেশি সংখ্যার জন্যও ভাল কাজ করা উচিত

গল্ফিং পরামর্শগুলির অপেক্ষায়, ভিবিএ খুব গল্ফ-বান্ধব নয় তবে এটি প্রায়শই প্রতিনিধিত্ব করে না, এবং আমি মনে করি এটি জাভাটিকে দীর্ঘায়িত করতে পারে।

সম্পাদনা 1: 62 বাইট ছাঁটাই করতে সাহায্য করার জন্য মানুকে ধন্যবাদ

Edit2: অদলবদল debug.printজন্য msgboxআউটপুট। 5 বাইট সংরক্ষণ করা হয়েছে


1
আপনি বন্ধনীগুলি থেকে মুছে ফেলতে পারেন Debug.Print (q)। এছাড়াও, আপনি বেশিরভাগ শ্বেতস্পেস সরিয়ে ফেলতে পারেন (সম্পাদক এগুলিকে ফিরিয়ে দেবে, তবে সেগুলি প্রয়োজনীয় নয়)। আপনার কি ডিক্লেয়ার করার প্রয়োজন হবে না k as Long, কেবল লিখতে k। এটি ভেরিয়েন্ট টাইপের একটি পরিবর্তনশীল হবে এবং কোডটি এখনও কাজ করবে still এই টিপসের সাহায্যে আপনার 165 বাইটে নামা উচিত।
কমনগ্যুই

আরও কিছু চিন্তা: আপনি প্রথম এবং শেষ যুক্তিটি বাদ দিতে পারেন InStr, তারা theyচ্ছিক। Trim()আপনার প্রয়োজন নেই, যেহেতু আপনার সাদা জায়গা নেই। সঠিকভাবে প্রয়োগ করা হয়েছে, আমি 147 বাইট পেয়েছি
কমনগ্যুই

1
সহায়তা মনুর জন্য ধন্যবাদ, একটি দ্রুত প্রশ্ন, আউটপুটটি স্ট্যান্ডার্ড আউটপুট হওয়া উচিত। আমি নিশ্চিত না যে এটি ভিবিএতে কী হবে। debug.print qস্ট্যান্ডার্ড আউটপুট হবে? msgbox qখাটো হলেও আবার মনে হচ্ছে এটি বেশ মানক আউটপুট নয়। টিপিকাল আউটপুট এর Sheet1.cells(1,1)মতো মনে হয় তবে এটি এক্সেলের মধ্যে চলছে running এই ধরণের জিনিস সম্পর্কে কোড-গল্ফ কতটা কঠোর তা সম্পর্কে আমি ঠিক নিশ্চিত নই।
জিমি জাজজক্স

অভিনন্দন, আপনি জাভা উত্তরটি মারলেন;) আমিও জানি না ... কেবল ব্যবহার করুন MsgBox, যদি কেউ অভিযোগ করেন তবে আপনি এটি আবার পরিবর্তন করতে পারেন।
কমনগ্যুই

4

জাভাস্ক্রিপ্ট ES6, 99 86 78 76 72 অক্ষর

f=n=>{for(s="1";--n;s=s.replace(/.?2|.$/,m=>[1,2,10][+m]||20));return s}

// Old version, 76 chars:
f=n=>{for(s="1";--n;s=s.replace(/02|12|2|.$/,m=>[1,2,10][+m]||20));return s}

// Old version, 86 chars:
f=n=>{for(s="1";--n;s=s.replace(/(02|12|2|.$)/,m=>[1,2,10,,,,,,,,,,20][+m]));return s}

// Old version, 99 chars:
f=n=>{for(s="1";--n;s=s.replace(/(^2|02|12|20|.$)/,m=>({0:1,1:2,2:10,12:20,20:100}[+m])));return s}

টেস্ট:

;[1,2,3,6,7,50,100,200,1000,10000,100000,1000000,1048576].map(f) == "1,2,10,20,100,11011,110020,1100110,111110120,1001110001012,1100001101010020,1111010000100100100,10000000000000000001"

মজাদার ঘটনা: এই নম্বর সিস্টেমটিতে আসলে কিছু যোগ্যতা রয়েছে। কোনও সংখ্যা বাড়ানোর সময়, আপনি সর্বদা সর্বাধিক দুটি সংলগ্ন অঙ্ক পরিবর্তন করবেন - আপনাকে কখনই পুরো সংখ্যার মাধ্যমে পরিবর্তনটি বহন করতে হবে না। সঠিক উপস্থাপনা যা ও (1) এ ইনক্রিমেন্টিংয়ের অনুমতি দেয়।

সত্যিকারের জন্য আপনাকে ধন্যবাদ - এটি আমার সমাধানের ভিত্তি :)


আমি কীভাবে রেজেক্সে অপ্রয়োজনীয় ধনুর্বন্ধনী ছেড়ে যেতে পারি? o_O
কিওয়ারটি

3

অক্টাভা, 107 101 বাইট

হওয়া উচিত হে (log n) যদি আমি এই অধিকার figuring করছি ...

function r=s(n)r="";for(a=2.^(uint64(fix(log2(n+1))):-1:1)-1)x=idivide(n,a);r=[r x+48];n-=x*a;end;end

সুন্দর-মুদ্রণ:

function r=s(n)
  r="";
  for(a=2.^(uint64(fix(log2(n+1))):-1:1)-1)
    x=idivide(n,a);
    r=[r x+48];
    n-=x*a;
  end
end

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

আউটপুট (আমি 1e18 - 1সঠিকভাবে এটি করতে পারি তা দেখাতে অন্তর্ভুক্ত করছি এবং আউটপুটগুলির শেষ সেটটি দেখায় যে এই মানটি গণনা করতে কত সময় লাগে):

octave:83> s(uint64(1e18))
ans = 11011110000010110110101100111010011101100100000000000001102

octave:84> s(uint64(1e18)-1)
ans = 11011110000010110110101100111010011101100100000000000001101

octave:85> tic();s(uint64(1e18)-1);toc()
Elapsed time is 0.0270021 seconds.

3

টি-এসকিউএল, 221 189 177 বাইট

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

এখানে প্রতিটি ক্যোয়ারীর সাথে প্রথম কমা দেওয়ার আগে গণনা করার জন্য কেবল সংখ্যাটি যুক্ত করুন।

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

DECLARE @ BIGINT=,@T VARCHAR(MAX)='';WITH M AS(SELECT CAST(2AS BIGINT)I UNION ALL SELECT I*2FROM M WHERE I<@)SELECT @T += STR(@/(I-1),1),@%=(I-1)FROM M ORDER BY I DESC SELECT @T

এবং এখানে এটি আবার, কিন্তু পঠনযোগ্য:

DECLARE 
    @ BIGINT=,
    @T VARCHAR(MAX)='';

WITH M AS
(
    SELECT
        CAST(2 AS BIGINT) I

    UNION ALL

    SELECT I * 2
    FROM M
    WHERE I < @
)

SELECT 
    @T+=STR(@/(I-1),1),
    @%=(I-1)
FROM M 
ORDER BY I DESC

SELECT @T

যদি আমি কেবল ইনট ব্যবহার করি তবে এটি 157 বাইটে বেরিয়ে আসতে কিছুটা ছোট হতে পারে:

DECLARE @ INT=,@T VARCHAR(MAX)='';WITH M AS(SELECT 2I UNION ALL SELECT I*2FROM M WHERE I<@)SELECT @T+=STR(@/(I-1),1),@%=(I-1)FROM M ORDER BY I DESC SELECT @T

এবং আরও একবার, আরও পঠনযোগ্য:

DECLARE 
    @ INT=,
    @T VARCHAR(MAX)='';

WITH M AS
(
    SELECT
        2I

    UNION ALL

    SELECT 
        I * 2
    FROM M
    WHERE I < @
)

SELECT 
    @T+=STR(@/(I-1),1),
    @%=(I-1)
FROM M 
ORDER BY I DESC

SELECT @T

মনে রাখবেন @বর্গ Char(8000) স্কেলের একটি বৈধ শনাক্তকারী এবং আপনি সম্ভবত এনভারচার (সর্বাধিক) এর চেয়ে কম দামের সাথে পালাতে পারেন। আপনি charপরিবর্তে রূপান্তর করতে পারেন varchar, বা strফাংশনটি ব্যবহার করতে পারেন ।
মাইকেল বি

@ মিশেলবি ওহ, আমি ভেবেছিলাম যে আমি ব্যবহার করেছি @, বোকা। CHAR(8000)পরামর্শ বেশ ভাল, আমি চেষ্টা করব। আমি সবসময় STR()মাথা আপ জন্য ধন্যবাদ অস্তিত্ব সম্পর্কে ভুলে যেতে মনে হয় ।
PenutReaper

আসলে সাহায্য করে না। তবে, আপনি সিটিইয়ের পরে অংশটি আবার লিখতে পারেন :: select @t=concat(@t,@/i)এটি আরও কম হওয়া উচিত। যদিও sql2012 প্রয়োজন।
মাইকেল বি

@ মিশেলবি আহ। CONCAT, আমি ২০০৮ এ আছি So সুতরাং আমি এখনই এসকিউএল ফিডেল ব্যবহার না করে এটি পরীক্ষা করতে পারছি না। ভাল কল যদিও।
PenutReaper

3

ট্যুরিং মেশিন কোড, 333 293 বাইট

আমি এখানে ব্যবহৃত হিসাবে একটি এনকোডিং ব্যবহার করছি

এই মেশিনটিতে 9 টি রাজ্য এবং 11 টি রঙ ব্যবহার করা হয়েছে।

যদি বাইনারি ইনপুটটি অনুমোদিত হয় তবে এটি প্রসেসে কয়েক দশক বাইট সংরক্ষণ করে কেবল 4 টি রঙে কমে যেতে পারে।

0 _ _ l 1
0 * * r 0
1 9 8 l 2 
1 8 7 l 2
1 7 6 l 2
1 6 5 l 2
1 5 4 l 2
1 4 3 l 2
1 3 2 l 2
1 2 1 l 2
1 1 0 l 2
1 0 9 l 1
1 _ _ r 8
2 _ _ l 3
2 * * l 2
3 _ 1 r 4
3 * * l 5
4 _ _ r 0
4 * * r 4
5 * * l 5
5 _ _ r 6
6 _ _ l 7
6 2 0 l 7
6 * * r 6
7 _ 1 r 4
7 0 1 r 4
7 1 2 r 4
8 _ _ * halt
8 * _ r 8

যদি উপরের লিঙ্কটি কাজ না করে (কখনও কখনও এটি আমার পক্ষে কাজ করে তবে অন্যান্য সময় পৃষ্ঠাটি লোড করতে অস্বীকার করে) আপনি এই জাভা বাস্তবায়ন ব্যবহার করে এটিও পরীক্ষা করতে পারেন


2

পার্ল, 66 বাইট

নম্বরটি এসটিডিআইএন-এর মাধ্যমে ইনপুট হতে হবে।

$_=1;$c=<>;s/(.*)(.?)2(.*)/$1.$2+1 .$3.0/e||$_++while(--$c);print;

আপনার সমাধান কীভাবে কাজ করে তা ব্যাখ্যা করতে পারেন? আমি কিভাবে আপনার যা দরকার দেখি না (.?)$2থেকে (.*)$1লোভী হতে হবে এবং প্রথমে চরিত্র পাওয়া উচিত। তবে এটি মুছে ফেলা হলে কোডটি আর সঠিক ফলাফল দেয় না! যাইহোক, আপনার ফাইনালের দরকার নেই ;
সিজে ডেনিস

@ সিজেডেনিস এই বাইটটি সংরক্ষণ করার জন্য ধন্যবাদ। যাইহোক,? সেখানে অঙ্ক না থাকলে দুটির ঠিক আগেই অঙ্কটি আসবে (যেমন 20)। 120 বা 10020 এর মতো ক্ষেত্রে, রেজেক্স গ্রুপগুলি এর মতো: () (1) 2 (0) এবং (10) (0) 2 (0)। তারপরে প্রথম গোষ্ঠীকে সহজভাবে উপেক্ষা করা হবে, দ্বিতীয় গ্রুপটি (যা সর্বদা সম্ভব হয় বা ফাঁকা থাকলে একটি সংখ্যা হয়) বৃদ্ধি করা হয় এবং তৃতীয় গোষ্ঠীটি (সর্বদা জিরো সমন্বিত থাকে) উপেক্ষা করা হয় এবং একটি শূন্য যুক্ত করা হয়। আমি এই রেইজেক্সের জন্য আমার গাইড হিসাবে কেবল ওইআইএস এন্ট্রি ব্যবহার করেছি।
ফ্রেডরিক

আমি 53 বাইট নিচে আপনার কোড করেছেন: $c=<>;s/(.*)2(.*)/$1+1 .$2.0/e||$_++while($c--);print। আমি ঠিক বলেছি, (.?)কখনও কিছুই ধরা দেয়নি।
সিজে ডেনিস

$_=1;$c=<>;s/(.?)2/1+$1.0/e||$_++while(--$c);printএটি 50 বাইট যা অপ্টিমাইজ করা যায় । .*আপনি যদি এটি কেবল মূল পাঠ্যের সাথে প্রতিস্থাপন করেন তবে শুরু বা শেষ দিকে অপ্টিমাইজ করা যায়। এছাড়াও শেষে 0 যুক্ত করার কোনও কারণ নেই কারণ আসলটিতে সবসময় কেবল জিরো থাকে $3
থ্রেড

2

পাইথ, 19 বাইট

m/=%Qtydtd^L2_SslhQ

লোগারিদমিক জটিলতা। প্রয়োজনীয় পরিমাণে সহজেই শেষ হয়। অঙ্কের তালিকা আকারে আউটপুট।

বিক্ষোভের


2

পার্ল, 84 70 67 বাইট

$n=<>;$d*=2while($d++<$n);$_.=int($n/$d)while($n%=$d--,$d/=2);print

খুব গোলাপী নয়, আরও ভাল হচ্ছে তবে এটি খুব দ্রুত কাজ করে!

ডেনিসের পরামর্শ এটিকে 51 এ নামিয়ে আনে (50 বাইট + -পি সুইচ)

$d*=2while$d++<$_;$\.=$_/$d|0while$_%=$d--,$d/=2}{

এটা তোলে আবশ্যক মত বলা হবে perl -p skew_binary.pl num_list.txtযেখানে num_list.txtসংখ্যা এটিতে এনকোড সঙ্গে একটি একক লাইন রয়েছে।


@frederick আমরা আমাদের আসন 2. জন্য অপেক্ষা প্রান্ত আছি
রবার্ট গ্রান্ট

@ রবার্টগ্রান্ট তিনি তার মন্তব্য দুটি বিষয় থেকে এক জিনিসকে গল্ফ করেছেন!
সিজে ডেনিস

দুটি জিনিস: ১. $ আরজিভি [0] ব্যবহার না করে <> ইনপুট হিসাবে ব্যবহার করুন। আর্গুমেন্ট হিসাবে কোনও ফাইল না থাকলে এটি স্টিনের কাছ থেকে ইনপুট নেবে। ২. এর মতো বিজোড় গণনা স্কিমগুলির জন্য, নিয়মিত এক্সপ্রেশন ব্যবহার করুন। বিজোড় গণিত ক্রিয়াকলাপ না করে আপনি কোনও সংখ্যায় অঙ্কগুলি প্রতিস্থাপন করতে পারেন যেন এটি একটি স্ট্রিং। সর্বোত্তম অংশটি হ'ল আপনি এটিতে একই সাথে গাণিতিক ক্রিয়াকলাপগুলি (বর্ধিতকরণের মতো) ব্যবহার করতে পারেন, তবে শর্ত থাকে যে এটি একটি স্ট্রিং যা সম্পূর্ণ অঙ্কগুলিতে গঠিত। নিয়মিত এক্সপ্রেশন অপারেটরগুলির জন্য ডকুমেন্টেশন চেক করুন, কারণ এগুলি অনেকগুলি অনুষ্ঠানে খুব কার্যকর হতে পারে।
ফ্রেডেরিক

দুঃখিত, আমি এন্টার টিপলাম এবং মন্তব্যটি শেষ করার আগে এটি সংরক্ষণ করা হয়েছে।
ফ্রেডেরিক

@ ফ্রেডেরিক এত বিনয়ী হন না। আমরা জানি কী হয়েছিল!
রবার্ট গ্রান্ট

1

গণিত, 65

যথেষ্ট দ্রুত হওয়া উচিত, যদিও আমাকে স্বীকার করতে হবে আমি এটি তৈরি করার আগে অন্যান্য জমাগুলিতে উঁকি দিয়েছি।

f = (n = #;
     l = 0; 
     While[n > 0,
      m = Floor[Log2[1 + n]];
      l += 10^(m - 1);
      n -= 2^m - 1
     ]; l)&

ব্যবহার:

f[1000000000000000000]

আউটপুট:

11011110000010110110101100111010011101100100000000000001102

10 ^ 228 এর আগে কোথাও ম্যাক্সেক্সট্রাপ্রিসিশন ত্রুটি বার্তা দেওয়া শুরু করে (যার জন্য এটি আমার মেশিনে .03 সেকেন্ডে ফলাফল গণনা করে)

ম্যাক্সেক্সট্রপ্রেসিশন সীমাটি সরিয়ে দেওয়ার পরে, এটি এক সেকেন্ডে প্রায় 10 ^ 8000 পর্যন্ত সংখ্যা পরিচালনা করবে।

ইনপুট:

Timing[Block[{$MaxExtraPrecision = Infinity}, f[10^8000]];]

আউটপুট:

{1.060807, Null}

1

সি, 95 বাইট

void f(unsigned long i,int*b){for(unsigned long a=~0,m=0;a;a/=2,b+=!!m)m|=*b=i/a,i-=a**b;*b=3;}

এটি একটি পূর্ণসংখ্যা এবং একটি বাফার গ্রহণ করে যাতে অঙ্কগুলি ফেরত দেয়। ফলাফলগুলি সঞ্চিত হয় b, মান দিয়ে শেষ হয় 3(যা আউটপুটে ঘটতে পারে না)। আমাদের ইনপুট হ্যান্ডেল করতে হবে না 0(কেবলমাত্র প্রশ্নটি ইতিবাচক পূর্ণসংখ্যা হিসাবে নির্দিষ্ট করা হয়েছে), তাই খালি আউটপুট এড়াতে কোনও বিশেষ কেসিং নেই।

প্রসারিত কোড

void f(unsigned long i,int*b)
{
    for (unsigned long a=~0, m=0;  a;  a/=2, b+=(m!=0)) {
        *b = i/a;               /* rounds down */
        i -= *b * a;
        m = m | *b;             /* m != 0 after leading zeros */
    }
    *b=3;                       /* add terminator */
}

আমরা সর্বাধিক উল্লেখযোগ্য অঙ্ক দিয়ে শুরু করে ধারাবাহিক বিয়োগফল দ্বারা পরিচালনা করি। একমাত্র জটিলতা হ'ল আমরা mনেতৃস্থানীয় শূন্যগুলি মুদ্রণ এড়ানোর জন্য চলকটি ব্যবহার করি । unsigned long long10 বাইট ব্যয়ে চাইলে একটি প্রাকৃতিক বর্ধন করা যেতে পারে।

পরীক্ষা প্রোগ্রাম

কমান্ড আর্গুমেন্ট হিসাবে রূপান্তর করতে পাস নম্বরগুলি। এটি intঅ্যারে বাফারকে একটি মুদ্রণযোগ্য অঙ্কের স্ট্রিংয়ে রূপান্তর করে । ইনপুট জন্য রানটাইম এক মিলিসেকেন্ডের কম 1000000000000000000

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char**argv)
{
    while (*++argv) {
        unsigned long i = strtoul(*argv, NULL, 10);
        int result[1024];
        f(i,result);

        /* convert to string */
        char s[1024];
        {char*d=s;int*p=result;while(*p!=3)*d++=*p+++'0';*d=0;}
        printf("%lu = %s\n", i, s);
    }

    return EXIT_SUCCESS;
}

পরীক্ষার ফলাফল

$ ./51517 $(seq 20)
1 = 1
2 = 2
3 = 10
4 = 11
5 = 12
6 = 20
7 = 100
8 = 101
9 = 102
10 = 110
11 = 111
12 = 112
13 = 120
14 = 200
15 = 1000
16 = 1001
17 = 1002
18 = 1010
19 = 1011
20 = 1012

আমার ধারণা, সি ++ সংস্করণটি একই রকম, তবে auto a=~0ullসামান্য উপকারের জন্য ব্যবহার করতে পারেন ...
টবি স্পাইট


0

কফিস্ক্রিপ্ট, 92 69 বাইট

কিওয়ার্তির উত্তর এবং আপডেটের ভিত্তিতে :

f=(n)->s='1';(s=s.replace /(.?2|.$)/,(m)->[1,2,10][+m]||20)while--n;s

# older version, 92 bytes
f=(n)->s='1';(s=s.replace /(^2|02|12|20|.$)/,(m)->{0:1,1:2,2:10,12:20,20:100}[+m])while--n;s


@ কিওয়ার্টি আমি আপনার উত্তরের জন্য অ্যাট্রিবিউশন সরবরাহ করেছি, এবং উভয় জবাব দিয়ে আমি
রেজেক্সের

পুরো ঘটনাটি প্রতিস্থাপন করা হয়। আপনার কেন এটি দলের ভিতরে থাকা দরকার? জেএস সংস্করণ বন্ধনী ছাড়াই ফায়ারফক্সে কাজ করে।
কিওয়ারটি

0

জাপট , 31 বাইট

_r/?2|.$/g_÷C ç20 ª°Zs3}}gU['0]

এটি অনলাইন চেষ্টা করুন!

প্রায় সরাসরি বন্দর এই জাতীয় সমাধান । আরও ভাল উপায় আছে কি না ধারণা।

আনপ্যাকড এবং কীভাবে এটি কাজ করে

X{Xr/?2|.$/gZ{Z÷C ç20 ||++Zs3}}gU['0]

X{     Declare a function...
Xr       Accept a string, replace the regex...
/?2|.$/g   /.?2|.$/   (g is needed to match *only once*, opposite of JS)
Z{       ...with the function... (matched string will be 0,1,2,02 or 12)
Z÷C        Implicitly cast the matched string into number, divide by 12
ç20        Repeat "20" that many times (discard fractions)
||         If the above results in "", use the next one instead
++Z        Increment the value
s3         Convert to base-3 string (so 0,1,2 becomes 1,2,10)
}}
gU['0] Repeatedly apply the function on "0", U (input) times

0

স্ট্যাক্স , 16 বাইট

üxëàè£öΦGΩ│Je5█ò

এটি চালান এবং এটি ডিবাগ করুন

আমি আনুষ্ঠানিক জটিলতা ক্লাসটি হুবহু নিশ্চিত নই, তবে এই মেশিনে এক সেকেন্ডের দশমাংশে সমস্ত পরীক্ষার কেস করা যথেষ্ট দ্রুত।

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে। এই প্রোগ্রামে, এক্স রেজিস্টারটি মূলত ইনপুট ধারণ করে।

z       push []
{       start block for while loop
 |X:2N  -log2(++x)
 {^}&   increment array at index (pad with 0s if necessary)
 xc:G-X unset high bit of x; write back to x register
w       while; loop until x is falsy (0)
$       convert to string

এটি চালান

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