বিট ভাসমান ক্রম


22

একটি বিট থেকে floats lsb করার MSB এক অবস্থানে প্রতিটি সময় পর্যন্ত এটি floats চলন্ত শীর্ষ পাত্রের:

0000
0001
0010
0100
1000

একবার এক বিট উপরে উঠলে, অন্য কিছু তার যাত্রা শুরু করে এবং যখন এটি অন্য বিটের সাথে মিলিত হয় তখন তা থেমে যায়:

1001
1010
1100

ধারকটি বিটগুলি পূর্ণ না হওয়া পর্যন্ত এটি ঘটে:

1101
1110
1111

চ্যালেঞ্জ

একটি পূর্ণসংখ্যার নম্বর দেওয়া হয়েছে , সেই সংখ্যক বিটের একটি ধারকের জন্য " বিট ভাসমান ক্রম " আউটপুট দিন ।

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

উদাহরণ

কেবলমাত্র সাংখ্যিক ক্রম প্রয়োজনীয়, বাইনারি প্রতিনিধিত্ব উদাহরণ হিসাবে প্রদর্শিত হয়:

  • জন্য 1 :0 1

    0 -> 0
    1 -> 1
    
  • জন্য 3 :0 1 2 4 5 6 7

    000 -> 0
    001 -> 1
    010 -> 2
    100 -> 4
    101 -> 5
    110 -> 6
    111 -> 7
    
  • জন্য 4 :0 1 2 4 8 9 10 12 13 14 15

    0000 -> 0
    0001 -> 1
    0010 -> 2
    0100 -> 4
    1000 -> 8
    1001 -> 9
    1010 -> 10
    1100 -> 12
    1101 -> 13
    1110 -> 14
    1111 -> 15
    
  • জন্য 8 :0 1 2 4 8 16 32 64 128 129 130 132 136 144 160 192 193 194 196 200 208 224 225 226 228 232 240 241 242 244 248 249 250 252 253 254 255

    00000000 -> 0
    00000001 -> 1
    00000010 -> 2
    00000100 -> 4
    00001000 -> 8
    …
    …
    …
    11111000 -> 248
    11111001 -> 249
    11111010 -> 250
    11111100 -> 252
    11111101 -> 253
    11111110 -> 254
    11111111 -> 255
    

2
আমরা ক্রমটি কোনও ক্রমে আউটপুট করতে পারি (অর্থাত্ বিপরীত), বা সেগুলি নিম্ন থেকে সর্বোচ্চে বাছাই করতে হবে?
কেভিন ক্রুইজসেন

1
আমরা কি ভাসমান হিসাবে আউটপুট করতে পারি? যেমন[0.0, 1.0]
গ্রিমি

8
আমরা বাইনারি উপস্থাপনা ব্যবহার করে আউটপুট করতে পারি?
নীল

আমরা কি শূন্য-সূচকযুক্ত ক্রমটি আউটপুট করতে পারি? অর্থাত্0 -> [0, 1]
এ্যাটিন্যাট

উত্তর:


7

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

LRL˜Íoî.¥ï

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

L                 # range [1..input]
 R                # reversed
  L               # convert each to a range: [[1..input], [1..input-1], ..., [1]]
   ˜              # flatten
    Í             # subtract 2 from each
     o            # 2**each
      î           # round up (returns a float)
       ï          # convert to integer
        .¥        # undelta

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

7

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

y=n=2**input()
while y:print n-y;y=y&y-1or~-y

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

এটি 2**nইনপুট জন্য ক্রম প্রতিটি শব্দ বিয়োগ জেনারেটর সংক্ষিপ্ত পরিণত n। আমরা যদি তাদের বাইনারি সম্প্রসারণটি নীচে দেখি তবেn=5 দেখি তবে আমরা বাইনারি সম্প্রসারণে 1 এর ত্রিভুজগুলির একটি সুন্দর নিদর্শন দেখতে পাই।

100000  32
011111  31
011110  30
011100  28
011000  24
010000  16
001111  15
001110  14
001100  12
001000  8
000111  7
000110  6
000100  4
000011  3
000010  2
000001  1

বাইনারি প্রসারণের ডানদিকের একটিকে সরিয়ে প্রতিটি সংখ্যা পূর্ববর্তীটি থেকে প্রাপ্ত হয়, যদি এটি সংখ্যা 0 করে দেয় তবে আমরা এর পরিবর্তে 1 টি বিয়োগ করি, 1 এর একটি নতুন ব্লক তৈরি করে যা একটি নতুন ছোট ত্রিভুজ শুরু করে। এটি হিসাবে প্রয়োগ করা হয়েছে y=y&y-1or~-y, যেখানে y&y-1ডানদিকের 1 সরাতে কিছু কৌশল রয়েছে এবং মানটি 0 হলে এর পরিবর্তে or~-yদেয় y-1

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

def f(n,x=0):1%n;print x;f(n-x%2,x+(x%2**n or 1))

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

এমন একটি ফাংশন যা মুদ্রণ করে ত্রুটি সহ শেষ করে। নীচের আরও দুর্দান্ত প্রোগ্রামটি দীর্ঘতর হয়ে উঠল।

51 বাইট

n=input()
x=0
while n:n-=x%2;print x;x+=x%2**n or 1

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


6

জেলি , 11 10 বাইট

RUḶ’F2*ĊÄŻ

@ গ্রিমির 05AB1E উত্তরটির পোর্ট , সুতরাং তাকে উর্ধ্বমুখী করা নিশ্চিত করুন!
-১ বাইট @ গ্রিমিকে ধন্যবাদ ।

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

ব্যাখ্যা:

R           # Create a list in the range [1, (implicit) argument]
 U          # Reverse it to [argument, 1]
           # Create an inner list in the range [0, N) for each value N in this list
           # Decrease each by 1
    F       # Flatten the list of lists
     2*     # Take 2 to the power each
       Ċ    # Ceil
        Ä   # Undelta (cumulative sum) the list
         Ż  # And add a leading 0
            # (after which the result is output implicitly)

2
R_2-> Ḷ’-1 এর জন্য। হয় শুধুমাত্র ইন্দ্রিয়গ্রাহ্য পরিসীমা , আমি সত্যিই ইচ্ছুক 05AB1E এটির জন্য একটি একক byter ছিল।
গ্রিমি

@ গ্রিমি আহ, কীভাবে আমি সেটিকে মিস করেছি। আমি ব্যাপ্তিটি অনুসন্ধান করেছি এবং অবশ্যই এটি কোনওভাবেই ছাড়তে হবে ..>।> ধন্যবাদ!
কেভিন ক্রুইজসেন

4

পার্ল 5 ( -n), 41 40 বাইট

-১ বাইট থেলস এক্সকলিতে

map{/01.*1/||say oct}glob"0b"."{0,1}"x$_

Tio

  • "{0,1}"x$_: স্ট্রিং "{0,1}"n বার বার
  • "0b". : সম্মতি জানাতে "0b"
  • glob : গ্লোব সম্প্রসারণ (কার্তেসিয়ান পণ্য)
  • map{... }: প্রতিটি উপাদান জন্য
  • /01.*1/||: 01পরে কিছু পরে যখন এড়িয়ে যান1
  • say oct : দশমিক রূপান্তর এবং বলতে


4

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

সন্দেহ হলে xnor এর পদ্ধতিটি ব্যবহার করুন ।

n=>(g=x=>x?[n-x,...g(x&--x||x)]:[])(n=1<<n)

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


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

f=(n,x=0)=>x>>n?[]:[x,...f(n,x+=x+(x&=-x)>>n|!x||x)]

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

কিভাবে?

p(x)2xp(0)=0

xx1x

p(52)=52AND52=4

pএকটিএনএকটিএন(0)=0

একটিএন(+ +1)={একটিএন()+ +পি(একটিএন()),যদি পি(একটিএন())0 এবং একটিএন()+ +পি(একটিএন())<2এনএকটিএন()+ +1,অন্যভাবে

মন্তব্য

f = (                   // f is a recursive function taking:
  n,                    //   n = input
  x = 0                 //   x = current term of the sequence
) =>                    //
  x >> n ?              // if x is greater than or equal to 2**n:
    []                  //   stop recursion
  :                     // else:
    [                   //   update the sequence:
      x,                //     append the current term to the sequence
      ...f(             //     do a recursive call:
        n,              //       pass n unchanged
        x +=            //       update x:
          x + (x &= -x) //         given x' = lowest bit of x set to 1:
          >> n          //         if x + x' is greater than or equal to 2**n
          | !x          //         or x' is equal to 0: add 1 to x
          || x          //         otherwise, add x' to x
      )                 //     end of recursive call
    ]                   //   end of sequence update


3

পার্ল 6 , 43 বাইট

{0 x$_,{say :2($_);S/(0)1|0$/1$0/}...1 x$_}

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

নামবিহীন কোড ব্লক যা একটি সংখ্যা নেয় এবং ক্রমগুলি নিউলাইনগুলি দ্বারা আলাদা করে আউটপুট করে। এটি 0 টি পুনরাবৃত্তি এন বার দিয়ে শুরু করে এর পরে প্রতিস্থাপন করে কাজ 01করে10 অথবা শেষ 0একটি সঙ্গে 1সংখ্যা পর্যন্ত শুধু সেটি নয়।

বা 40 বাইট, নাহুয়েল ফিউইলুলের পদ্ধতির ব্যবহার করে

{grep /010*1/|{say :2($_)},[X~] ^2 xx$_}

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


" তারপর পারেন প্রতিস্থাপন 01সঙ্গে 10অথবা শেষ 0একটি সঙ্গে 1সংখ্যা পর্যন্ত শুধু সেটি হল " এই একটি প্রতিভা পদক্ষেপ নেই!
পেপারবার্ডমাস্টার



3

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

def f(n,c=0):
 while c<2**n:yield c;r=c&-c;c+=c+r>>n or r or 1

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

কমপক্ষে ধারণাটি @ আরনাউল্ডের সমাধান হিসাবে একই

অন্য 65 বাইট সমাধান:

lambda n:g(2**n-1)
g=lambda c:[0][c:]or g(c-((c&-c)//2 or 1))+[c]

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



2

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

Tsãʒ1ÛSO2‹}C{

-১ বাইটকে @ গ্রিমিকে ধন্যবাদ (এখানে তার সংক্ষিপ্ত পদ্ধতির দিকেও নজর দিন)।

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

ব্যাখ্যা:

T             # Push 10
 sã           # Swap to get the (implicit) input, and get the cartesian product with "10"
   ʒ          # Filter it by:
    1Û        #  Remove leading 1s
      SO      #  Get the sum of the remaining digits
        !     #  Check that the sum is either 0 or 1 by taking the factorial
              #  (NOTE: Only 1 is truthy in 05AB1E)
         }C   # After the filter: convert all remaining strings from binary to integer
           {  # And sort (reverse) them
              # (after which the result is output implicitly)

বিকল্প 13: oL<ʒbIj1Û1¢2‹। দেখে মনে হচ্ছে না যে আমি এটি কম পেতে পারি।
গ্রিমি

1
@ গ্রিমি আমার সবেমাত্র ছিল oL<ʒbIj1ÛSO2‹এবং আমার ত্রুটিটি কোথায় তা দেখার চেষ্টা করছিলাম। :) তবে আমি খুশী হয়ে দেখলাম যে আপনি আমার উত্তরগুলির মধ্যে একটির পরিবর্তনের জন্য একটি সংক্ষিপ্ত সংস্করণ খুঁজে পাচ্ছেন না। ; পি (ইনবি 4 আপনি সমস্ত
এক্সডের

1
@ গ্রিমি আমার অনুভূতিটি SO2‹সম্ভবত একরকম 3 বাইট হতে পারে তবে আমি এটি দেখছি না এবং পুরোপুরি নিশ্চিতও নই .. কিছু বিকল্প আছে যেমন, SO1~বা এর মতো SÆ>d, তবে আমি একটি 3-বাইটার খুঁজে পাই না।
কেভিন ক্রুইজসেন

1
10 সম্পূর্ণ ভিন্ন পদ্ধতির সাথে
গ্রিমি

1
আপনার অনুভূতি ঠিক আছে, আমি শুধু একটি 3-byter পাওয়া যায় নি: SO!। খুব নিশ্চিত যে আমার কাছে কিছু পুরানো উত্তর রয়েছে যা 2‹এটি থেকেও উপকৃত হতে পারে।
গ্রিমি

2

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

.+
*0
L$w`.(.*)
$.`*1$'1$1

এটি অনলাইন চেষ্টা করুন! বাইনারি আউটপুট। যদি তা গ্রহণযোগ্য না হয় তবে 39 বাইটের জন্য:

.+
*0
L$w`.(.*)
$.`*1$'1$1
+`10
011
%`1

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

.+
*0

ইনপুটটিকে nজিরোসের স্ট্রিংয়ে রূপান্তর করুন ।

L$w`.(.*)

সমস্ত সম্ভাব্য অ-খালি সাবস্ট্রিংগুলি মিলিয়ে নিন।

$.`*1$'1$1

প্রতিটি স্ট্রিংয়ের জন্য, আউটপুট: 0s সহ উপসর্গটি এস এ পরিবর্তিত হয় 1; প্রত্যয়; প্রাথমিকের সাথে ম্যাচটি 0পরিবর্তিত হয় 1

+`10
011
%`1

বাইনারি থেকে দশমিক রূপান্তর করুন।



1

কাঠকয়লা , 19 বাইট

I⮌E⊕θEι⁺⁻X²IθX²ιX²λ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

    θ               Input
   ⊕                Incremented
  E                 Map over implicit range
      ι             Outer index
     E              Map over implicit range
           Iθ       Input cast to integer
               ι    Outer index
                  λ Inner index
         X²  X² X²  Power of 2
       ⁺⁻           Subtract and add
 ⮌                  Reverse outer list
I                   Cast to string
                    Implicitly print


1

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

.+
*0
/0/+<0`(0)1|0$
1$1

বাইনারি আউটপুট। ইনপুটটিতে একটি ট্রিলিং নিউলাইন থাকা উচিত।

ব্যাখ্যার চেষ্টা:

.+              #match the entire input
*0              #replace it with that many zeroes
/0/+<0`(0)1|0$  #while the string has a 0, substitute the first match and output
1$1             #if 01 is present in the string, replace it with 10, else replace the last character with $

/0/অপশনগুলি পুনরায় সাজিয়ে আমি 3 বাইট দীর্ঘ লম্বা রেজেক্স বিকল্পটি এড়াতে চেষ্টা করেছি , কিন্তু পারিনি couldn't

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


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


1

k4, 28 24 বাইট

0,+\"j"$2 xexp,/-1+|,\!:

@ গ্রিমির অ্যাপ্রোচ কে 4 এ পোর্ট করা হয়েছে

সম্পাদনা: -4 এনএনজি ধন্যবাদ!


1
!:'1+|!:->|,\!:
এনজিএন

আপনি স্থানটি সরিয়ে ফেলতে পারেনxexp
ngn

@ জিএন, আঃ |,\!:এখন এতটাই স্পষ্ট মনে হয়েছে যে আমি এটি দেখতে পাচ্ছি!
স্ক্রল করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.