প্রতিবেশীদের সাথে বিটগুলি অদলবদল করুন


26

কার্য বিবরণী

একটি পূর্ণসংখ্যা দেওয়া হয়, এর (2 কে – 1) -২ র্থ এবং 2 কে- সমস্ত সংখ্যার কম > 0 এর জন্য কমপক্ষে উল্লেখযোগ্য বিটগুলি অদলবদল করুন । এটি OEIS এ ক্রম A057300

(সংখ্যাটি "অসীম অনেকগুলি" শীর্ষস্থানীয় জিরো রয়েছে বলে অনুমান করা হয় practice অনুশীলনে, এর অর্থ কেবল একক 0 বিটকে বিজোড় দৈর্ঘ্যের সংখ্যার জন্য প্রস্তুত করা।)

এখানে চিত্র বর্ণনা লিখুন

এটি , তাই সংক্ষিপ্ততম কোডটি (বাইটে) জয়ী।

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

0 -> 0
1 -> 2
9 -> 6
85 -> 170
220 -> 236
1827 -> 2835
47525 -> 30298

5
আমরা কি বিট শিফট এর মতো জিনিসের জন্য সংখ্যাটি মান হিসাবে মানিয়ে নিতে পারি?
xnor

1
@ এক্সনর: আমি মনে করি এটি ডিফল্ট / সম্প্রদায়ের sensকমত্য (অন্যথায় সি ইত্যাদির উত্তরগুলি সর্বদা ভুল হবে)? অনেক নিশ্চিত! :)
লিন

@ লিন: সি unsigned char array_of_bytes[1024]আপনার প্রত্যাশা মতো কাজ করতে হবে (যেমন 1024 * CHAR_BITএন্ট্রি সহ বিটফিল্ড হবে )। আমি কল্পনা করতাম স্বেচ্ছাসেবী দৈর্ঘ্যের ইনপুটগুলিকে সমর্থন করে এমন বেশিরভাগ উত্তর ধরে CHAR_BITনেওয়া উচিত, যদিও, বাইটগুলির মধ্যে বিট স্থানান্তর করা জটিল। সুতরাং আপনি সম্পূর্ণরূপে kকিছু ধ্রুব আকার পর্যন্ত সমর্থন করতে প্রয়োজনীয়তা রাখতে পারেন, যেমন 256 বা AES এর জন্য যুক্তিসঙ্গত কিছু এবং 256 বিট পূর্ণসংখ্যার ধরণের ভাষা ছাড়া লুপগুলি ব্যবহার করতে হবে। এটি সিমড ভেক্টরগুলিকে একটি x86 এএসএম উত্তরের জন্য বিবেচনা করার যোগ্য করে তুলতে পারে: পি
পিটার কর্ডেস

2
আমি @ জিবিটগুলি মিনিবিটগুলির সাথে অদলবদল করছি
অপটিমাইজার

উত্তর:


9

জেলি , 10 9 7 বাইট

b4d2UFḄ

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

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

b4d2UFḄ  Main link. Argument: n (integer)

b4       Convert n to base 4.
  d2     Divmod each quaternary digit x by 2, yielding [x : 2, x % 2].
    U    Upend; reverse each pair, yielding [x % 2, x : 2].
     F   Flatten the 2D list of binary digits.
      Ḅ  Convert from binary to integer.

20

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

lambda n:2*n-3*(4**n/3&n/2)

বিট কৌশল!

বাইনারি nফর্ম ...ghfedcbaআছে বলে । তারপরে, আমরা একে অন্য বিট হিসাবে বিভক্ত করতে পারেন

n   = o + 2*e
n   = ...hgfedcba
o   = ...0g0e0c0a
2*e = ...h0f0d0b0

তারপরে, বিট-স্যুইচ করা ফলাফল sহিসাবে প্রকাশ করা যেতে পারে s=2*o+e

s   = 2*o + e
s   = ...ghefcdab
2*o = ...g0e0c0a0
e   = ...0h0f0d0b

আমরা বরং শুধুমাত্র একটি গনা চাই eএবং o, তাই আমরা প্রকাশ করার o=n-2*eএবং বিকল্প

s=2*(n-2*e)+e = 2*n-3*e

সুতরাং, এখন এটি eশর্তে প্রকাশ করা অবশেষ n। সংখ্যাটি বাইনারিতে M=4**n/3ফর্ম ...10101010101রয়েছে, যা বিজোড় অঙ্কগুলির জন্য একটি মুখোশ হিসাবে কাজ করে। ব্যয়কারী nনিশ্চিত করে যে Mএটি যথেষ্ট দীর্ঘ। , Bitwise গ্রহণ andএর n/2এবং এই মান দেয় eযেমন ইচ্ছা।

n/2     = ...hgfedcb
M       = ...1010101
n/2 & M = ...h0f0d0b = e

পরিবর্তে আমরা eশর্তে প্রকাশ করতে পারি o e=(n-o)/2, যা দেয় s=(n+o*3)/2, যা এক্সসট থেকে একটি অপ্টিমাইজেশনের জন্য একটি বাইট ধন্যবাদ সংরক্ষণ করে।

lambda n:n+(n&4**n/3)*3>>1

দুর্দান্ত ব্যাখ্যা, এবং একবার থেকে বিয়োগ করে মাস্কটি ব্যবহার করার জন্য দুর্দান্ত কৌশল n। তবে, আমি বিপরীত "বিজোড়" বনাম "এমনকি" বিট নামকরণ কনভেনশনকে পছন্দ করি। এলএসবি বিট 0, যা সমান (যদিও এটি প্রথম বিট)। সিমডি প্রোগ্রামিংয়ে, যেখানে প্রায়শই পরিবর্তনগুলি সূচকের সাহায্যে উপাদান নির্বাচন করে, সূচকগুলি 0 থেকে গণনা করা হয়, সুতরাং নিম্ন উপাদানটিকে একটি এমনকি উপাদান হিসাবে বিবেচনা করা স্বাভাবিক। উদাহরণস্বরূপ[ 3 2 1 0 ]
পিটার কর্ডস

আমি আপনার অভিব্যক্তিটি ব্যবহার করে একটি সি উত্তর যুক্ত করেছি। বাইট সঞ্চয় বনাম ডিজিটাল ট্রমা'র সি উত্তরের সমস্ত ক্রেডিট এর কারণে।
পিটার কর্ডস

2
26:lambda n:n+(n&4**n/3)*3>>1
xsot

@ পিটারকর্ডস আপনার সি কোডটি আমার জন্য জিসিসি 4.8.3 এবং ডিফল্ট সেটিংস সহ কাজ করে। f(x){return x+((x&~0U/3)*3)>>1;}ফেরৎ 1 ইনপুট জন্য 2
ডেনিস

@ ডেনিস: হ্যাঁ, সি আমার জন্য কাজ করে, আমার খারাপ। আমি আসলে calc(ওরফে এপ্যাক্যাল্যাক) এক্সপ্রেশনটি পরীক্ষা করছিলাম, আসলে সি না। আমি ভেবেছিলাম আমি ঠিক আছি যেহেতু 32 বিবিট বা দু'জনের পরিপূরকের দরকার নেই। আমি ভাবিনি যে অভিব্যক্তিটি ঠিক দেখাচ্ছে, তাই আমি আমার ভুল পরীক্ষাগুলি বিশ্বাস করতে রাজি ছিলাম। তবে যাইহোক, বিট্যাকগুলি বিকাশের জন্য আমার আরও ভাল আরপিএল প্রয়োজন। কোন পরামর্শ? (আদর্শগতভাবে লিনাক্স কমান্ড লাইনটি লাইক bc -lবা calc, কিন্তু বাস্তবে প্রকাশ করা int32_t/ uint32_tবা অন্য কোনও কিছুর স্পষ্টতা নয়))
পিটার কর্ডস

10

সি ফাংশন, 38

বিট-twiddling:

f(x){return(x&~0U/3*2)/2+(x&~0U/3)*2;}

Ideone।


বা এটি মজাদার জন্য:

সি পুনরাবৃত্তি ফাংশন, 43

অনুযায়ী OEIS সূত্র ,a(4n+k) = 4a(n) + a(k), 0 <= k <= 3

f(x){return x>3?4*f(x/4)+f(x%4):x%3?3-x:x;}

অথবা

f(x){return x>3?4*f(x/4)+f(x%4):x%2*2+x/2;}

Ideone।


1
এক্সনরের এক্সপ্রেশনটির চতুর রূপান্তরটি এটি সি তে 32 বাইটে নেমে আসে I আমি এটি একটি পৃথক উত্তর হিসাবে পোস্ট করেছি, কারণ এটি একটি উল্লেখযোগ্যভাবে ভিন্ন দৃষ্টিভঙ্গি।
পিটার কর্ডস

8

সিজেম, 16 14 13 বাইট

ri4b4e!2=f=4b

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

ri  e# Read input and convert to integer.
4b  e# Get base-4 digits.
4e! e# Push all permutations of [0 1 2 3].
2=  e# Select the third one which happens to be [0 2 1 3].
f=  e# For each base-4 digit select the value at that position in the previous
    e# list, which swaps 1s and 2s.
4b  e# Convert back from base 4.

আদেশের সাথে সেই কৌশলটি খুব ভাল!
লুইস মেন্ডো


5

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

(n,m=0x55555555)=>n*2&~m|n/2&m

জাভাস্ক্রিপ্টের পূর্ণসংখ্যার সীমাবদ্ধতার কারণে কেবল 107374182323 পর্যন্ত কাজ করে। 38 36 বাইট 4294967295 অবধি কাজ করে:

(n,m=0x55555555)=>(n*2&~m|n/2&m)>>>0

সম্পাদনা করুন: @ ব্যবহারকারী81655 ধন্যবাদ 2 বাইট সংরক্ষণ করা।

51 বাইট 4503599627370495 অবধি কাজ করে:

n=>parseInt(n.toString(4).replace(/1|2/g,n=>3-n),4)

হতে n<<1পারে n*2?
ব্যবহারকারী 81655

@ user81655 এবং আমি খুব ব্যবহার n/2করতে পারি! আমি জানি না কেন আগে আমি তাদের কথা ভাবিনি।
নিল

আমি কখনও দেখিনি >>>... ওটা কী?
তিতাস

@ টিটাস এটি পছন্দ >>>তবে এটি স্বাক্ষরবিহীন শিফট করে। >>>0মূলত একটি 32-বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যায় রূপান্তর করে।
নিল

5

x86 asm ফাংশন: মেশিন কোডের 14 বাইট

uint64_t সংস্করণ: 24 বাইট

x86-64 SysV কলিং কনভেনশন ( xইন edi), তবে এই একই মেশিন কোডটি 32 বিট মোডেও কাজ করবে। (যেখানে leaযেমন ডিকোড হবে lea eax, [edi + eax*2], যা অভিন্ন ফলাফল দেয় )।

0000000000000040 <onemask_even>:
  40:   89 f8                   mov    eax,edi
  42:   25 55 55 55 55          and    eax,0x55555555
  47:   29 c7                   sub    edi,eax
  49:   d1 ef                   shr    edi,1
  4b:   8d 04 47                lea    eax,[rdi+rax*2]
  4e:   c3                      ret    
4f: <end>

0x4f - 0x40 = 14 বাইট

এটি এক্সনরের দুর্দান্ত মাস্ক-একবারের বিপরীত উপায়ে ব্যবহার করে সংকলক আউটপুট । (এবং বিপরীত পরিভাষা: নিম্ন বিট বিট 0, যা সমান, বিজোড় নয়))

unsigned onemask_even(unsigned x) {
  unsigned emask = ~0U/3;
  unsigned e = (x & emask);
  return e*2 + ((x - e) >> 1);
}

সংকলকটি কী করে তার চেয়ে কোনও উন্নতি পাই না। আমি এটি mov eax, 0x555.../ হিসাবে লিখতে পারি and eax, edi, তবে এটি একই দৈর্ঘ্য।


Bit৪ বিট পূর্ণসংখ্যার জন্য একই ফাংশনটিতে 24 বাইট লাগে (গডবোল্ট লিঙ্কটি দেখুন)। আমি কোনও movabs rax, 0x55...রেজিস্টারটিতে মুখোশ তৈরি করতে 10-বাইটের চেয়ে কম আর দেখতে পাচ্ছি না। (x86 এর divনির্দেশটি চতুষ্পদ, সুতরাং 3-এর দ্বারা অল-সাইন ইন বিহীন সাহায্য করে না))

আমি র‌্যাক্সটিতে মুখোশ উত্পন্ন করতে একটি লুপ নিয়ে এসেছি তবে এটি 10 ​​বাইট (ঠিক একই দৈর্ঘ্যের mov imm64)।

# since 0x55 has its low bit set, shifting it out the top of RAX will set CF
0000000000000000 <swap_bitpairs64>:
   0:   31 c0                   xor    eax,eax      ; old garbage in rax could end the loop early
0000000000000002 <swap_bitpairs64.loop>:
   2:   48 c1 e0 08             shl    rax,0x8
   6:   b0 55                   mov    al,0x55      ; set the low byte
   8:   73 f8                   jnc    2 <swap_bitpairs64.loop>  ; loop until CF is set
000000000000000a <swap_bitpairs64.rest_of_function_as_normal>:
 # 10 bytes, same as   mov  rax, 0x5555555555555555
 # rax = 0x5555...
   a:   48 21 f8                and    rax,rdi
   ...

যদি আমরা জানতাম যে বিদ্যমান বাইটগুলির মধ্যে কোনওটিরই raxকম বিট সেট নেই, তবে আমরা এড়িয়ে যেতে পারি xorএবং এটি 8 বাইট দীর্ঘ হবে।

এই উত্তরের পূর্ববর্তী সংস্করণটিতে loopইনসন ব্যবহার করে 10 বাইট লুপ ছিল তবে এটি 0xFFFFFFFFFFFFFF08পুনরাবৃত্তির সবচেয়ে খারাপ ক্ষেত্রে রান-টাইম ছিল , কারণ আমি কেবল সেট করেছি cl


5

ওসিস , 17 বাইট (প্রতিদ্বন্দ্বী)

n4÷axxn4÷xxe+3120

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

ওসিস আদনান দ্বারা নির্মিত একটি ভাষা যা অনুক্রমগুলিতে বিশেষীকরণ করা হয়।

বর্তমানে, এই ভাষাটি পুনরাবৃত্তি এবং বদ্ধ ফর্ম করতে পারে।

আমরা এই সূত্রটি ব্যবহার করি: a(4n+k) = 4a(n) + a(k), 0 <= k <= 3

বেস কেসটি নির্দিষ্ট করা সহজ: 3120শেষটির শেষে এর অর্থ সহজ a(0)=0, a(1)=2, a(2)=1, a(3)=3

n4÷axxn4÷xxe+3120
                0  a(0) = 0
               2   a(1) = 2
              1    a(2) = 1
             3     a(3) = 3

n                  push n (input)
 4÷                integer-divide by 4
   a               a(n/4)
    xx             double twice; multiply by 4
                   now we have 4a(n/4)
      n            push n (input)
       4÷xx        integer-divide by 4 and then multiply by 4
                   since there is no modulo currently, n%4
                   is built as n-(n/4*4)
           e       we should have done a(n-(n/4*4)), but this
                   is a shortcut for a(n-x) where x is the top
                   of stack. Therefore, we now have a(n-n/4*4)
                   which is a(n%4).
            +      add.

4

এমএটিএল , 10 বাইট

BP2eP1ePXB

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

সিকোয়েন্সের প্রথম পদগুলি তৈরি করার জন্য সংশোধিত সংস্করণ ( OEIS A057300 )।

ব্যাখ্যা

B     % Take input implicitly. Convert to binary array
P     % Flip
2e    % Convert to two-row 2D array, padding with a trailing zero if needed. 
      % Because of the previous flip, this really corresponds to a leading zero
P     % Flip each column. This corresponds to swapping the bits
1e    % Reshape into a row
P     % Flip, to undo the initial flipping
XB    % Convert from binary array to number. Display implicitly

3

zsh, 28 বাইট

<<<$[`tr 12 21<<<$[[#4]$1]`]

কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়, STDOUT এ আউটপুট দেয়।

এটি বাশ-সামঞ্জস্যপূর্ণ নয় কারণ এটি zsh- নির্দিষ্ট বেস রূপান্তর সিনট্যাক্স ব্যবহার করে।

                       $1     input (first command line argument)
                 $[      ]    arithmetic expansion
                   [#4]       output in base 4
              <<<             pass the result of this to...
      tr                      the `tr' command
         12 21                and replace 1s with 2s, 2s with 1s
     `                    `   evaluate the result...
   $[                      ]  in another arithmetic expansion, to convert back
                                to base 10
<<<                           output the result on STDOUT

3

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

। + +
$ *
+ + `(1 + +) \ 1
$ 1x
X1
1
^
এক্স
r` (।) (।)
$ 2 $ 1
1
এক্স@
+ + `@ এক্স
এক্স@@
এক্স*(@*)
$ .1
0 $

পরীক্ষা স্যুট. (সামান্য সংশোধিত।)

ঠিক আছে, কেবল মজাদার জন্য: 7 বাইট

T`12`21

বেস -4 ইনপুট হিসাবে নেয় এবং বেস -4 হিসাবে আউটপুট নেয়।

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


4
আমি দ্বন্দ্ব বোধ করছি। আমি আপনার উত্তর নীচের অর্ধেক upvote করতে চান, কিন্তু উপরের অংশ অর্ধেক
ডেনিস

1
@ ডেনিস এখন আমার কাছে সেই বিটগুলি অদলবদল হয়েছে।
ফাঁস নুন

3

05 এ বি 1 ই, 8 বাইট

4B12‡4ö

-আডানানকে -৫ বাইটের জন্য ধন্যবাদ!

সিপি-1252 এনকোডিং ব্যবহার করে।

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

ব্যাখ্যা:

4B       - Take input and convert to base 4.
  12Â    - Push 12 bifurcated.
     ‡   - Transliterate [1, 2] to [2, 1].
      4ö - Convert to base 10.

2
দুর্দান্ত, তবে আপনি 8 বাইটের 1 2‚2 1‚সাথে প্রতিস্থাপন করতে পারেন 12Â
আদনান

চমৎকার উত্তর! এখানে একটি 8 বাইট বিকল্প:4в2‰íJJC
কেভিন ক্রুইজসেন

3

সি, 32 30 29 বাইট

f(x){return(x&~0U/3)*3+x>>1;}                // 30 bit version, see below

// less golfed:
f(x){return ((x & 0x55555555)*3 + x) >>1;}   //  >> is lower precedence than +

এক্সনরের পাইথন উত্তরের বিষয়ে এক্সসটের মন্তব্য থেকে অ্যালগরিদম অনুলিপি করেছেন । উভয় উপায়ে মাস্কিংয়ের পরিবর্তে এক উপায়ে মাস্ক করুন এবং একত্রিত করুন।

এটি আমি পরীক্ষিত শেষ সংস্করণটির মতো একই সংশ্লেষকে সংকলন করে এবং এটি কাজ করে (এক্স পর্যন্ত 0x3FFFFFFFএবং x এর উপরে যেটি 30 বিট সেট না করা থাকে, নীচে দেখুন)। মেশিন কোডে, এটি আমার বিদ্যমান asm জবাবের সমান দৈর্ঘ্য।


উপরের সংস্করণ সর্বদা ফলাফলের উচ্চ বিট সাফ করে । সেরা নিরাপদ সংস্করণটি 32 বাইট:

g(x){return 2*x-3*(x/2U&~0U/3);}   // safe 32bit version, works for all x

পাইথন সংস্করণটিতে এই সমস্যা নেই, কারণ পাইথন যখন প্রয়োজন হয় তখন স্বেচ্ছাসেবী-নির্ভুলতা পূর্ণসংখ্যার ধরণের ব্যবহার করে , স্থির উপরের সীমাটিতে পরিবর্তিত হওয়ার পরিবর্তে।


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

2
আপনি বাক্সে শর্তাদি পুনরায় সাজিয়ে সেই স্থানটি ফেলে দিতে পারেন।
xsot

2

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

আপগোটকে ধন্যবাদ 4 বাইট সংরক্ষণ করা হয়েছে

n=>+('0b'+/(..)+$/.exec('0'+n.toString`2`)[0].split``.reduce((p,c)=>p.length-1?[p.join(c)]:[p[0],c],[''])[0],2)

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

n=>+('0b'+                              //parse as binary literal
    /(..)+$/.exec('0'+n.toString`2`)[0] //convert to binary string with an even number of digits
        .split``                        //convert to array
        .reduce((p,c)=>p.length-1?[p.join(c)]:[p[0],c],[''])
                                        //swap all numbers
)

+('0b"+binary_string_here)
ars পার্সিয়ান্ট

1

জে, 20 বাইট

4#.0 2 1 3{~4#.^:_1]

ব্যবহার

>> f =: 4#.0 2 1 3{~4#.^:_1]
>> f 85
<< 170

কোথায় >>STDIN এবং STDOUT <<হয়।

Ungolfed

to_base   =: 4 #.^:_1 ]
transpose =: 0 2 1 3 {~ to_base
from_base =: 4 #. transpose

তিনটি কাঁটাচামচ

সাইড নোট

অফিসিয়াল ইন্টারপ্রেটারে 1 বাইট সংরক্ষণ ^:_1করে প্রতিস্থাপন করা যায় inv

যাইহোক, অনলাইন দোভাষী কেউ এটি প্রয়োগ করে না।



1

ইন্টারকল , 60 বাইট

DOWRITEIN.1PLEASE.1<-!1~#21845'$.1~#43690DOREADOUT.1DOGIVEUP

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

ইন্টারকলের জন্য সবচেয়ে প্রাকৃতিক ফর্ম্যাটে আই / ও দিয়ে 16-বিট পূর্ণ সংখ্যার জন্য কাজ করে: ইনপুটটি দশমিক সংখ্যাগুলির একটি সিরিজ যা বেশ কয়েকটি প্রাকৃতিক বা নির্মিত ভাষার একটিতে বর্ণিত হয় এবং আউটপুটটি "butchered রোমান সংখ্যায়" থাকে।

এটি ইন্টারেকালের বাইনারি অপারেটরগুলি প্রকৃতপক্ষে স্বজ্ঞাতভাবে ব্যবহার করা যেতে পারে এমন বিরল চ্যালেঞ্জগুলির মধ্যে এটি একটি, যেহেতু বিটগুলি প্রতিস্থাপনের বিষয়টি তারা কী করছে। নির্বাচন করুন ( ~) দ্বিতীয় আর্গুমেন্টের সাথে সম্পর্কিত তার প্রথম যুক্তি থেকে বিটগুলি নিয়ে এবং জিরো দিয়ে ডানদিকে প্যাড করে এবং মিশ্রিত ( $) তার আর্গুমেন্ট থেকে বিটগুলি বিভক্ত করে যেমন প্রথম যুক্তির বিটগুলি আরও তাত্পর্যপূর্ণ হয়। সুতরাং সহজ সমাধানটি হ'ল কম উল্লেখযোগ্য বিকল্প বিটগুলি .1~#21845নির্বাচন করুন ( ), আরও উল্লেখযোগ্য বিকল্প বিটগুলি নির্বাচন করুন (.1~#43690), এবং এগুলি বিপরীত ক্রমে একত্রিত করে। ভাগ্যক্রমে বাইট গণনার জন্য, যদিও ইন্টারকলের অপারেটরগুলির কোনও সংজ্ঞায়িত নজির নেই (যেহেতু ভাষার লক্ষ্যটির কোনও নজির নেই), এটি প্রমাণিত হয়েছে যে টিআইও-তে সি-ইন্টারকলাল এই নির্দিষ্ট অভিব্যক্তির জন্য খুব বেশি গ্রুপিংয়ের প্রয়োজন হয় না, যেহেতু কেবলমাত্র একটি বাইট ব্যয় করে '.সংক্ষিপ্ত করা যেতে পারে !

32-বিট পূর্ণসংখ্যার জন্য সমর্থন সহ:

ইন্টারকল , 67 বাইট

DOWRITEIN:1PLEASE:1<-':1~#0$#65535'$:1~#65535$#0DOREADOUT:1DOGIVEUP

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

ইন্টার্কাল 32-বিট লিটারেলগুলিকে অনুমতি দেয় না, যা এটি পড়তে আসলে আরও সহজ করে তোলে , কারণ এর অর্থ বিকল্প বিট নির্বাচন করার জন্য যাদু স্থির দুটি দুটি 16 বিট লিটারেল একসাথে মিশিয়ে তৈরি করা উচিত, যেখানে একজনের সমস্ত শূন্য এবং অন্যটির সমস্ত। (প্রকৃতপক্ষে, এখানে 32-বিট আক্ষরিক উপস্থিতি থাকলেও এটি আরও ছোট #0$#65535হবে two দুটি বাইট বন্ধ #1431655765, এবং এটি অন্যটির ক্ষেত্রেও যায়)) এটি আন্তরিকতার জন্য পুরো প্রক্রিয়াটি অপ্রাকৃতভাবেই যোগাযোগ করে।

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

ইন্টারকল , 71 বাইট

DO:1<-:1/.2$.3PLEASEWRITEIN:2DO:1<-:2PLEASE:2<-.3$.2DOREADOUT:2DOGIVEUP

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

এটি মিশ্রিত হয়েছে :1তা ঘোষণা করে পুরোপুরি নির্বাচন করে , ইনপুটটিতে সেট করে, তারপরে মিশ্রিত করে আউটপুট করে । যেহেতু যেমন ওভারলোড ছিল , নির্ধারণ মান এবং যে এই ধরনের মান অর্জন , যা ফলাফল থেকে আরো উল্লেখযোগ্য পর্যায়ক্রমে বিট ধারণকারী এবং কম গুরুত্বপূর্ণ পর্যায়ক্রমে বিট রয়েছে। এটি ওভারলোডের সাথে প্রতিস্থাপন করতে পারলে দুটি বাইট দ্বারা দুটি 32-বিট সমাধানগুলির সংক্ষিপ্ত হবে , তবে.2.3:1.3.2:1.2$.3DO :1 <- :2.2.3:1:2.2:2.3PLEASE WRITE IN :1PLEASE WRITE IN :2 DO :1 <- :2:1CALCULATINGওভারলোডিং ব্যবহারের জন্য প্রয়োজনীয় হতে দেখা যাচ্ছে। আমিও মনে করি যে প্রোগ্রামটি শুরু করার চেয়ে ওভারলোডিং নিজেই DO:1<-:1/.2$.3চালিত করার জন্য আরও কিছু ছোট উপায় থাকতে পারে , তবে এটি আন্তঃকৌল হওয়ায় আমিও অনুভব করি যে সেখানে থাকতে পারে না।


0

গণিত, 44 বাইট

Fold[3#+##&,#~IntegerDigits~4/.{1->2,2->1}]&

আমার সিজেএম উত্তর হিসাবে একই পদ্ধতির উত্তর: বেস -4 এ রূপান্তর করুন, 1 এস এবং 2 এস পরিবর্তন করুন, ফিরে রূপান্তর করুন। এটি একটি বাইট সংরক্ষণ করার জন্য FromDigitsএকটি Foldঅপারেশন দিয়ে প্রতিস্থাপন করতে আলেফালফার কৌশলও ব্যবহার করে ।



0

জে, 22 বাইট

([:,_2|.\,&0)&.(|.@#:)

বেস 4 ট্রিকের পরিবর্তে অ্যারে হেরফেরের ভিত্তিতে বিকল্প পদ্ধতি approach

ব্যবহার

   f =: ([:,_2|.\,&0)&.(|.@#:)
   (,.f"0) 0 1 9 85 220 1827 47525
    0     0
    1     2
    9     6
   85   170
  220   236
 1827  2835
47525 30298

ব্যাখ্যা

([:,_2|.\,&0)&.(|.@#:)  Input: n
                   #:   Get the value as a list of base 2 digits
                |.@     Reverse it
(           )&.         Apply to the list of base 2 digits
         ,&0            Append a zero to the end of the list
    _2  \               Split the list into nonoverlapping sublists of size 2
      |.                Reverse each sublist
 [:,                    Flatten the list of sublists into a list
             &.(    )   Apply the inverse of (reversed base 2 digits)
                        to convert back to a number and return it

0

রেক্সএক্স, 88 বাইট

n=x2b(d2x(arg(1)))
o=0
do while n>''
  parse var n a+1 b+1 n
  o=o||b||a
  end
say x2d(b2x(o))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.