গল্ফ বিট বয়ন


14

দ্রষ্টব্য: এই চ্যালেঞ্জের প্রথমার্ধটি এসেছে মার্টিন ইন্ডারের আগের চ্যালেঞ্জ, ভিজ্যুয়ালাইজ বিট বয়ন

গুপ্ত প্রোগ্রামিং ল্যাঙ্গুয়েজ অশুভের বাইট মানগুলিতে একটি আকর্ষণীয় অপারেশন রয়েছে যা এটি "বুনন" বলে।

এটি মূলত বাইটের আটটি বিটের ক্রমবিন্যাস (প্যাটার্নটি প্রতিসাম্য হিসাবে আমরা কী গণনা শুরু করি তা বিবেচনা করে না):

  • বিট 0 বিট 2 এ সরানো হয়েছে
  • বিট 1 বিট 0 এ সরানো হয়েছে
  • বিট 2 বিট 4 এ সরানো হয়েছে
  • বিট 3 বিট 1 এ সরানো হয়েছে
  • বিট 4 বিট 6 এ সরানো হয়েছে
  • বিট 5 বিট 3 এ সরানো হয়েছে
  • বিট 6 বিট 7 এ সরানো হয়েছে
  • বিট 7 বিট 5 এ সরানো হয়েছে

সুবিধার্থে, এখানে আদেশের আরও তিনটি উপস্থাপনা। একটি চক্র হিসাবে:

(02467531)

ম্যাপিং হিসাবে:

57361402 -> 76543210 -> 64725031

এবং ম্যাপিংয়ের জোড়ার তালিকা হিসাবে:

[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]

8বয়নগুলি পরে , বাইটটি মূলত পুনরায় সেট করা হয়।

উদাহরণস্বরূপ, সংখ্যাটি বুনন 10011101(যা 157বেস 10 এ রয়েছে) উত্পাদন করবে 01110110(যা 118বেস 10 এ রয়েছে)।

ইনপুট

কেবলমাত্র 256বৈধ ইনপুট রয়েছে, যথা: এর মধ্যে 0এবং সমেতের মধ্যে সমস্ত পূর্ণসংখ্যা রয়েছে 255। এটি যে কোনও বেসে নেওয়া যেতে পারে, তবে এটি অবশ্যই সামঞ্জস্যপূর্ণ এবং আপনার চয়ন করা বেসটি দশটি না হলে আপনাকে অবশ্যই এটি নির্দিষ্ট করতে হবে।

আপনি আপনার ইনপুট শূন্য প্যাড না করতে পারেন ।

আউটপুট

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

আপনি আপনার আউটপুটগুলি শূন্য প্যাড করতে পারেন


সম্পর্কিত: বিট বয়নটি ভিজ্যুয়ালাইজ করুন


5
মজাদার ঘটনা: এটি চ্যালেঞ্জটি আমি মূলত পোস্ট করতে চেয়েছিলাম। তারপরে আমি এ্যাসসিআইআই শিল্পকে অনুক্রমের চিত্রটি কল্পনা করার জন্য আঁকলাম এবং তারপরে স্প 3০০০ পরামর্শ দিয়েছিল যে এটি রেন্ডারিং আরও ভাল চ্যালেঞ্জ তৈরি করবে। ;)
মার্টিন ইন্ডার

2
আউটপুট বেস কি ইনপুট বেস থেকে আলাদা হতে পারে? আপনি যখন "সামঞ্জস্যপূর্ণ" বলছেন তখন আমি বুঝতে পারি যে "একই বেসে প্রতিটি সম্ভাব্য ইনপুট"
লুইস মেন্ডো

আমি মনে করি যে চক্র হিসাবে প্রতিনিধিত্ব ম্যাপিং উপস্থাপনার চেয়ে বেশি কার্যকর হবে।
mbomb007

আমাকে বলতে হবে এএসসিআইআই শিল্পটি অবশ্যই আরও মজাদার।
উন্মাদ

2
এটি সত্যিই আরও কিছু পরীক্ষার কেস ব্যবহার করতে পারে।
জেমস

উত্তর:


32

পাইথন 2.7, 44 -> 36 বাইট

lambda x:x/4&42|x*2&128|x*4&84|x/2&1

10
দুর্দান্ত প্রথম উত্তর, পিপিসিজিতে আপনাকে স্বাগতম! :)
মার্টিন ইন্ডার

10
আপনি যদি পরিবর্তনের পরে| পরিবর্তে +এবং মুখোশ ব্যবহার করেন তবে আপনি বন্ধনীগুলি সরিয়ে 8 বাইট শেভ করতে পারেন।
পেলমেল

আপনি যেহেতু নতুন, আমি আপনাকে উল্লেখ করব যে আপনি আপনার গল্ফটি উন্নত করতে @ পেলমেলের পরামর্শটি নিতে পারেন এবং তারপরে <strike></strike>অগ্রগতিটি নির্দেশ করতে আপনার পুরানো বাইট স্কোরটি ব্যবহার করতে পারেন :-)
ইনসান


16

মন্দ, 3 অক্ষর

rew

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

ইনপুটটি 256 বেসে রয়েছে (যেমন ASCII), উদাহরণস্বরূপ 63 সংখ্যাটি লিখতে, ASCII 63 লিখুন যা ?

ব্যাখ্যা:

r          #Read a character
 e         #Weave it
  w        #Display it

এটি তাই প্রতারণার মতো অনুভব করে।


1
এএসসিআইআই 256 এর বেস নয়, এটি 128 বেস। অধ্যক্ষগুলি 128-255 এর জন্য কোন এনকোডিং ব্যবহার করা হয়? সম্পাদনা: দেখে মনে হচ্ছে এটি কেবল সিস্টেম এনকোডিং ব্যবহার করে।
মেগো

11

সিজেম, 15 12 বাইট

3 বাইট সংরক্ষণের জন্য FryAmTheEggman কে ধন্যবাদ।

l8Te[m!6532=

বেস 2 ইনপুট 2 বেস 2 এ আউটপুট, জিরো সঙ্গে 8 বিট প্যাড।

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

ব্যাখ্যা

l      e# Read the input.
8Te[   e# Left-pad it to 8 elements with zeros.
m!     e# Generate all permutations (with duplicates, i.e. treating equal elements
       e# in different positions distinctly).
6532=  e# Select the 6533rd, which happens to permute the elements like [1 3 0 5 2 7 4 6].

7

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

&8B[2K1B3D5C])

ইনপুট দশমিক হয়। আউটপুট শূন্য প্যাডযুক্ত বাইনারি।

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

ব্যাখ্যা

&8B         % Take input number implicitly. Convert to binary array with 8 digits
[2K1B3D5C]  % Push array [2 4 1 6 3 8 5 7]
)           % Index first array with second array. Implicitly display

7

জেলি, 11 বাইট

+⁹BḊŒ!6533ị

মার্টিনের সিজেম উত্তরের অনুবাদ। এখানে চেষ্টা করুন।

+⁹BḊ          Translate (x+256) to binary and chop off the MSB.
              This essentially zero-pads the list to 8 bits.
    Œ!        Generate all permutations of this list.
      6533ị   Index the 6533rd one.

1
আমি শূন্য প্যাডিং কৌশল পছন্দ করি। মার্জিত।
ট্রাইকোপ্লাক্স

7

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

f=n=>n*4&84|n*2&128|n/2&1|n/4&42

নজিরটির অপব্যবহার!
লিকি নুন

1
অবশ্যই অগ্রাধিকার এইভাবে কাজ করার জন্য ডিজাইন করা হয়েছিল! এটি এমনকি বিট শিফটগুলির সাথেও কাজ করবে তবে তারা আরও দীর্ঘ।
নীল

6

জে, 12 বাইট

6532 A._8&{.

পারমিটেশন A.ইনডেক্স সহ পারমিট বিল্টিন ব্যবহার করে6532 যা বিট-বুনন অপারেশনের সাথে সম্পর্কিত।

ব্যবহার

ইনপুট হ'ল বাইনারি সংখ্যার একটি তালিকা। আউটপুট হল 8 বাইনারি অঙ্কের শূন্য প্যাডযুক্ত তালিকা।

   f =: 6532 A._8&{.
   f 1 0 0 1 1 1 0 1
0 1 1 1 0 1 1 0
   f 1 1 1 0 1 1 0
1 1 0 1 1 0 0 1

ব্যাখ্যা

6532 A._8&{.  Input: s
       _8&{.  Takes the list 8 values from the list, filling with zeros at the front
              if the length(s) is less than 8
6532          The permutation index for bit-weaving
     A.       permute the list of digits by that index and return

6

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

+`^(?!.{8})
0
(.)(.)
$2$1
\B(.)(.)
$2$1

বেস 2 ইনপুট এবং আউটপুট, আউটপুট বাম-প্যাডযুক্ত।

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

ব্যাখ্যা

+`^(?!.{8})
0

এটি জিরো সহ ইনপুটটি বাম-প্যাড করে। +ইঙ্গিত করে যে এই পর্যায়ে পর্যন্ত স্ট্রিং পরিবর্তন স্টপ পুনরাবৃত্তি করা হয়। এটি স্ট্রিংয়ের সূচনার সাথে মেলে যতক্ষণ না এতে 8 টিরও কম অক্ষর থাকে 0এবং সেই অবস্থানে একটি সন্নিবেশ করে ।

এখন আসল অনুক্রমের জন্য। সোজা-সামনের সমাধানটি হ'ল:

(.)(.)(.)(.)(.)(.)(.)(.)
$2$4$1$6$3$8$5$7

তবে এটি বেদনাদায়ক দীর্ঘ এবং অপ্রয়োজনীয়। আমি রেটিনার ( Xক্রমসংলগ্ন বিটগুলির একটি অদলবদলকে উপস্থাপন করে) প্রয়োগ করা আরও সহজ যে ক্রমশক্তিটির পৃথক সূত্রটি পেয়েছি :

1 2 3 4 5 6 7 8
 X   X   X   X
2 1 4 3 6 5 8 7
   X   X   X
2 4 1 6 3 8 5 7

এখন এটি প্রয়োগ করা অনেক সহজ:

(.)(.)
$2$1

এটি কেবল দুটি অক্ষরের সাথে মেলে এবং এগুলিকে অদলবদল করে। যেহেতু ম্যাচগুলি ওভারল্যাপ হয় না, তাই এটি চারটি জুটি বদলে।

\B(.)(.)
$2$1

এখন আমরা আবার একই জিনিসটি করতে চাই, তবে আমরা প্রথম চরিত্রটি এড়িয়ে যেতে চাই। এটি করার সবচেয়ে সহজ উপায় হ'ল ম্যাচটি কোনও শব্দের সীমানায় শুরু না হওয়া প্রয়োজন \B


6

x86 মেশিন কোড, 20 বাইট

হেক্সে:

89C22455C1E002D0E0D1E880E2AAC0EA0211D0C3

এটি আ'লীগঞ্জিক রেজিস্ট্রারের মাধ্যমে ইনপুট নেওয়া এবং ফলাফল ফিরিয়ে দেওয়ার পদ্ধতি

disassembly

89 c2                   mov    edx,eax
24 55                   and    al,0x55  ;Clear odd bits
c1 e0 02                shl    eax,0x2  ;Shift left, bit 6 goes to AH...
d0 e0                   shl    al,1     ;...and doesn't affected by this shift
d1 e8                   shr    eax,1    ;Shift bits to their's target positions
80 e2 aa                and    dl,0xaa  ;Clear even bits
c0 ea 02                shr    dl,0x2   ;Shift right, bit 1 goes to CF
11 d0                   adc    eax,edx  ;EAX=EAX+EDX+CF
c3                      ret

5

সি (অনিরাপদ ম্যাক্রো), 39 বাইট

#define w(v)v*4&84|v*2&128|v/2&1|v/4&42

সি (ফাংশন), 41 বাইট

w(v){return v*4&84|v*2&128|v/2&1|v/4&42;}

সি (সম্পূর্ণ প্রোগ্রাম), 59 বাইট

main(v){scanf("%d",&v);return v*4&84|v*2&128|v/2&1|v/4&42;}

(প্রস্থান কোডের মাধ্যমে ফিরে আসে, সুতরাং সাথে অনুরোধ করুন echo "157" | ./weave;echo $?)

সি (স্ট্যান্ডার্ডস-কমপ্লায়েন্ট ফুল প্রোগ্রাম), 86 বাইট

#include<stdio.h>
int main(){int v;scanf("%d",&v);return v*4&84|v*2&128|v/2&1|v/4&42;}

সি (স্ট্যান্ডার্ডস-কমপ্লায়েন্ট পূর্ণ প্রোগ্রাম যার সংকলক সতর্কতা নেই), 95 বাইট

#include<stdio.h>
int main(){int v;scanf("%d",&v);return (v*4&84)|(v*2&128)|(v/2&1)|(v/4&42);}

সি (স্ট্যান্ডার্ডস-কমপ্লায়েন্ট কোনও সম্পূর্ণ সংকলনের সতর্কতা যা আর্গুমেন্ট বা স্টিডিন থেকে পড়তে পারে এবং এতে ত্রুটি / পরিসীমা পরীক্ষা করা অন্তর্ভুক্ত) 262 বাইট

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(int v,char**p){v=v<2?isatty(0)&&puts("Value?"),scanf("%d",&v)?v:-1:strtol(p[1],p,10);exit(*p==p[1]||v&255^v?fprintf(stderr,"Invalid value\n"):!printf("%d\n",(v*4&84)|(v*2&128)|(v/2&1)|(v/4&42)));}

ভাঙ্গন

প্রচুর বিদ্যমান উত্তরগুলির মতো অনেকটা একই: বিট-শিফটটি সমস্ত বিটগুলি <<2( *4), <<1( *2), >>1( /2) এবং >>2( /4) ব্যবহার করে স্থানে রেখে , তারপরে |এটি সমস্ত একসাথে।

বাকিগুলি বয়লার-প্লেটের বিভিন্ন স্বাদ ছাড়া কিছুই নয়।


4

গণিত, 34 বাইট

PadLeft[#,8][[{2,4,1,6,3,8,5,7}]]&

বেনামে ফাংশন। বাইনারি সংখ্যার একটি তালিকা নেয় এবং 8 বাইনারি সংখ্যার প্যাডেড তালিকা আউটপুট দেয়।


3

পাওয়ারশেল ভি 2 + 34 বাইট

("{0:D8}"-f$args)[1,3,0,5,2,7,4,6]

@ লেজিওনম্যামাল978 এর উত্তরের অনুবাদ । পুরো প্রোগ্রাম। বাইনারি সংখ্যা হিসাবে কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে ইনপুট নেয়, বাইনারি অ্যারে হিসাবে আউটপুট, শূন্য প্যাডযুক্ত।

"{0:D8}"-fঅংশ ব্যবহার মান সাংখ্যিক ফর্ম্যাটে স্ট্রিং পূর্বে লিখুন করতে 0ইনপুট $args-fঅপারেটর যেহেতু ইনপুট হিসাবে কোনও অ্যারে নেওয়া সমর্থন করে এবং আমরা স্পষ্টভাবে প্রথম উপাদানটি ব্যবহার করার কথা বলেছি {0:, তাই আমাদের স্বাভাবিক করার দরকার নেই $args[0]। আমরা সেই স্ট্রিংটিকে পেরেন্সে আবদ্ধ করি, তারপরে এটিতে সূচক[1,3,0,5,2,7,4,6] তাঁত দিয়ে । ফলাফল অ্যারে পাইপলাইনের উপর ছেড়ে যায় এবং আউটপুট অন্তর্ভুক্ত থাকে।

উদাহরণ

( .ToString()একটি অ্যারের জন্য ডিফল্ট `nপৃথক পৃথক রয়েছে, সুতরাং আউটপুট এখানে নতুন লাইন পৃথক করা হয়)

PS C:\Tools\Scripts\golfing> .\golf-bit-weaving.ps1 10011101
0
1
1
1
0
1
1
0

PS C:\Tools\Scripts\golfing> .\golf-bit-weaving.ps1 1111
0
0
0
1
0
1
1
1

3

মতলব, 49 48 44 বাইট

s=sprintf('%08s',input(''));s('24163857'-48)

বাইনারি মানগুলির স্ট্রিং হিসাবে ইনপুট নেয়। আউটপুট প্যাডড 4 লাইট সংরক্ষণ করেছেন লুইস মেন্ডোকে ধন্যবাদ।

ব্যাখ্যা:

input('')             -- takes input
s=sprintf('%08s',...) -- pads with zeros to obtain 8 digits
s('24163857'-48)      -- takes positions [2 4 1 6 3 8 5 7] from s (48 is code for '0')

3

ভি , 17 বাইট

8é0$7hd|òxplò2|@q

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

এটি বাইনারি ইনপুট এবং আউটপুট লাগে। বাইট গণনা বেশিরভাগ 0 এর সাথে প্যাডিং থেকে আসে। ইনপুটকে প্যাডিংয়ের অনুমতি দেওয়া হলে আমরা কেবল এটি করতে পারি:

òxplò2|@q

অক্ষরগুলি অদলবদলের পদ্ধতির জন্য মার্টিনের সমাধানটির জন্য ধন্যবাদ , যেমন:

1 2 3 4 5 6 7 8
 X   X   X   X
2 1 4 3 6 5 8 7
   X   X   X
2 4 1 6 3 8 5 7

ব্যাখ্যা:

8é0                 "Insert 8 '0' characters
   $                "Move to the end of the current line
    7h              "Move 7 characters back
      d|            "Delete until the first character
        ò   ò       "Recursively:
         xp         "Swap 2 characters
           l        "And move to the right
             2|     "Move to the second column
               @q   "And repeat our last recursive command.

3

05 এ বি 1 ই, 14 12 বাইট

žz+b¦œ6532èJ

ব্যাখ্যা

žz+b¦           # convert to binary padded with 0's to 8 digits
     œ6532è     # get the 6532th permutation of the binary number
           J    # join and implicitly print

ইনপুটটি বেস 10 এ রয়েছে।
আউটপুট বেস 2 হয়।

মার্টিন ইন্ডিয়ার সিজেএম উত্তর থেকে অনুমতিপত্রের ট্রিক নেওয়া s

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


2

পাইথ, 19 টি অক্ষর

s[@z1.it%2tzP%2z@z6

ইনপুট এবং আউটপুট বেস 2।

পাইথ বিশেষজ্ঞ থেকে অনেক দূরে, তবে যেহেতু অন্য কেউ এর জবাব দেয় নি এখনও আমি এটিকে শট দিয়েছি।

ব্যাখ্যা:

s[                # combine the 3 parts to a collection and then join them
  @z1             # bit 1 goes to bit 0
  .i              # interleave the next two collections
    t%2tz         # bits 3,5,7; t is used before z to offset the index by 1
    P%2z          # bits 0,2,4
  @z6             # bit 6 goes to bit 7

এটি শূন্য-প্যাডযুক্ত ইনপুট অনুমান করায় এটি অবৈধ।
ফাঁস নুন



1

vi, 27 বাইট

8I0<ESC>$7hc0lxp<ESC>l"qd0xp3@q03@q

যেখানে <ESC>এস্কেপ চরিত্রের প্রতিনিধিত্ব করে। I / O বাইনারি হয়, আউটপুট প্যাড করা হয়। ভিমে 24 বাইট:

8I0<ESC>$7hd0xpqqlxpq2@q03@q

<ESC>এটি চারপাশে ব্যাকটিক্স প্রয়োজন। আমি সম্পাদনা করতাম, তবে পরিবর্তন করার জন্য আরও 4 টি বাইট বের করতে পারব না ...
জো

@ সিরবিডেনএক্সভিআইআই ধন্যবাদ, স্থির।
নিল

0

আসলে, 27 বাইট

'08*+7~@tñiWi┐W13052746k♂└Σ

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

এই প্রোগ্রামটি বাইনারি স্ট্রিং হিসাবে ইনপুট এবং আউটপুট দেয় (আউটপুট শূন্য-প্যাডেড 8 বিট)।

ব্যাখ্যা:

'08*+7~@tñiWi┐W13052746k♂└Σ
'08*+                        prepend 8 zeroes
     7~@t                    last 8 characters (a[:~7])
         ñi                  enumerate, flatten
           Wi┐W              for each (i, v) pair: push v to register i
               13052746k     push [1,3,0,5,2,7,4,6] (the permutation order, zero-indexed)
                        ♂└   for each value: push the value in that register
                          Σ  concatenate the strings

0

জাভাস্ক্রিপ্ট, 98 বাইট

ইনপুটটি স্ট্রিং হিসাবে বেস -২ এ নেওয়া হয়, আউটপুটও স্ট্রিং হিসাবে বেস -২ হয়

n=>(n.length<8?n="0".repeat(8-n.length)+n:0,a="13052746",t=n,n.split``.map((e,i)=>t[a[i]]).join``)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.