বাইনারি রুলার তৈরি করুন


22

একটি নম্বর দেওয়া এন , প্রথম উৎপন্ন এন এই প্যাটার্ন কলাম:

                               #
               #               #
       #       #       #       #
   #   #   #   #   #   #   #   #
 # # # # # # # # # # # # # # # #
################################ ...

(1-indexed) n এ কলামটির উচ্চতা হ'ল n এর বাইনারি উপস্থাপনায় প্লাস 0বিটের সংখ্যা , এবং একটি। ফলস্বরূপ, নীচের স্তরটিতে প্রতিটি কলাম ভরাট থাকে, দ্বিতীয় স্তরটি প্রতিটি দ্বিতীয় কলামে, তৃতীয় স্তরটি প্রতি চতুর্থ কলামে থাকে etc.

বিধি

  • আপনি কোনও মানক পদ্ধতির মাধ্যমে ইনপুট এবং আউটপুট দিতে পারেন।
  • আপনি ধরে নিতে পারেন ইনপুটটি 1 এবং 999 এর মধ্যে একটি পূর্ণসংখ্যা।
  • আউটপুটে যতক্ষণ প্যাটার্ন অক্ষত থাকে ততক্ষণ কোনও পরিমাণ সাদা পরিমাণ থাকতে পারে may
  • প্যাটার্নটি অবশ্যই 1-সূচকযুক্ত এবং এখানে দেখানো একই ফর্ম্যাটে থাকতে হবে।
  • আপনি জায়গায় কোনও একক অ-হোয়াইটস্পেস অক্ষর ব্যবহার করতে পারেন #, তবে আপনি স্থানের অক্ষরটি পরিবর্তন করতে পারেন না।

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

1
#

2
 #
##

3
 # 
###

4
   #
 # #
####

5
   # 
 # # 
#####

7
   #   
 # # # 
#######

32
                               #
               #               #
       #       #       #       #
   #   #   #   #   #   #   #   #
 # # # # # # # # # # # # # # # #
################################

কয়েকটি আরও বড় পরীক্ষার কেস এখানে পাওয়া যাবে

স্কোরিং

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



এখন আমি বাইনারি দূরত্ব পরিমাপ করতে পারি! ওহ অপেক্ষা করুন ...
Okx

2
1. শাসককে কি অনুভূমিক হতে হবে? ২. চিহ্নগুলি কি থাকতে হবে #?
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান ১. হ্যাঁ এবং ২. না, এগুলি যে কোনও একক অ-স্থানের চরিত্র হতে পারে। আমি এটি নিয়মে যুক্ত করেছি।
ETH প্রোডাকশনগুলি

উত্তর:


11

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

i=n=input()
while i:i-=1;print((' '*~-2**i+'#')*n)[:n]

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

প্রচুর নেতৃস্থানীয় সাদা স্থানের সাথে মুদ্রণ। প্রতিটি সারি iথেকে গণনা করা শূন্যস্থানগুলির nপ্যাটার্নটির পুনরাবৃত্তি 2**i-1করে a #। এই প্যাটার্নটি শাসকের প্রস্থ পর্যন্ত পুনরাবৃত্তি হয় যা ইনপুট n। এটি প্যাটার্নের স্ট্রিং দ্বারা গুণিত করে nএবং এর nসাথে প্রথম অক্ষরগুলি নিয়ে [:n]

সমান দৈর্ঘ্যের বিকল্পের জন্য স্ট্রিং ফর্ম্যাট করে প্যাটার্নটি তৈরি করা যেতে পারে।

i=n=input()
while i:i-=1;print('%%%ds'%2**i%'#'*n)[:n]

একটি সুন্দর টুকরো টুকরো পদ্ধতি দীর্ঘ।

n=input();s=~-2**n*' '+'#'
exec"s=s[1::2]*2;print s[:n];"*n

~ হয় -1 বা +1?
স্টান স্ট্রাম

কিছু মনে করবেন না, এটি (-x) - 1
স্টান স্ট্রাম

10

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

n=int(input())
a=1
while a<n:a*=2
while a:print(("%%%dd"%a%4*n)[:n]);a//=2

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


বাহ, সারিগুলি কীভাবে উত্পন্ন হয় তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছিল। সাবাশ.
ইটিএইচ প্রডাকশনস

2
a=2**len(bin(n))72 বাইটের জন্য
ওভস

2
এটি মেমরির ত্রুটিগুলি দ্রুত আঘাত করবে এবং অতিরিক্ত সাদা স্থানের একগুচ্ছ মুদ্রণ করবে (অনুমোদিত) - তবে আপনি পাইথন 2 ব্যবহার করে 54 করতে পারেন ।
জোনাথন অ্যালান

9

ভি , 17 , 16 বাইট

é#Àñä}Är {ñÎÀlD

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

Hexdump:

00000000: e923 c0f1 e416 7dc4 7220 7bf1 cec0 6c44  .#....}.r {...lD

একটি বাইট সংরক্ষণ করার জন্য @ ক্রিটিক্সিলিথসকে ধন্যবাদ!

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

এটি নিম্নলিখিত প্যাটার্নটির প্রথম এন পুনরাবৃত্তি উত্পন্ন করে কাজ করে :

#

 #
##

   #
 # #
####

       #
   #   #
 # # # #
########

               #
       #       #
   #   #   #   #
 # # # # # # # #
################

                               #
               #               #
       #       #       #       #
   #   #   #   #   #   #   #   #
 # # # # # # # # # # # # # # # #
################################

এবং তারপরে প্রথম এন কলামগুলি বাদে সমস্ত কাটা । এর ফলে এটি এক টন শীর্ষস্থানীয় সাদা জায়গা তৈরি করবে, তবে ওপি বলেছে:

আউটপুটে যতক্ষণ প্যাটার্ন অক্ষত থাকে ততক্ষণ কোনও পরিমাণ সাদা পরিমাণ থাকতে পারে may

ব্যাখ্যা:

é#                      " Insert an '#'
  Àñ           ñ        " 'N' times:
    ä<C-v>}             "   Duplicate every line blockwise (duplicating horizontally instead of vertically)
           Ä            "   Duplicate the top line. This conveniently puts us on the first non-whitespace character (that is, '#')
            r           "   Replace this character with a space
              {         "   Move to the beginning of the buffer
                Î       " On every line:
                 Àl     "   Move 'N' characters to the right ('l' for right, makes sense, right?)
                   D    "   And delete everything after the cursor

আমি পুরোপুরি নিশ্চিত নই, তবে আমি মনে করি আপনি এটি মুছে ফেলতে পারেন |
ক্রিটসি লিথোস

পুনঃটুইট অনড় দৃষ্টিতে, এটি এতটাই স্পষ্ট! ভকভগক. :)
ডিজেএমসিএমহেম

5

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

f=(n,c=n,s='')=>c?f(n,c>>1,s+s+' ')+`
`+(s+1).repeat(c):''

@ETHProductions এর জন্য 1 বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে, তারপরে আরও 2 টি বাইট যখন দেখলাম যে কোনও অক্ষর ব্যবহার করা যেতে পারে।

একটি পুনরাবৃত্তি সমাধান।

পরীক্ষার কেস:

অ্যানিমেশন:


1
সাবাশ. আপনি বাইট সংরক্ষণ করতে পরিবর্তন c/2|0করতে পারেন c>>1
ইটিএইচ প্রডাকশনগুলি

ভাল, আমার বিটওয়াইজ অপারেটরদের ব্রাশ করা দরকার।
রিক হিচকক

4

এপিএল (ডায়ালগ) , 21 বাইট

'# '[1+⊖0⍪∨⍀⊖2⊥⍣¯1⍳⎕]

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

'# '[… `] স্ট্রিং এর সাথে সূচী করুন

 ইনপুট পান

 যে আমি অনেক ntegers

2⊥⍣¯1 বাইনারি রূপান্তর করুন, প্রয়োজন হিসাবে অনেক অঙ্ক ব্যবহার করে (প্রতিটি কলামে একটি নম্বর )

 উল্টে উল্টানো

∨⍀ উল্লম্ব संचयी বা হ্রাস

0⍪ উপরের দিকে শূন্য

 উলটে উল্টানো (অর্থাত্ আবার ব্যাক আপ)

1+ একটি যুক্ত করুন (1-ভিত্তিক সূচকের জন্য)





2

জাপট , 20 17 বাইট

@ শেগি এবং @ এইচটি প্রডাকশনগুলিতে 3 বাইট সংরক্ষণ করা হয়েছে

õ_¤q1 o Ä ço÷z w

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

ব্যাখ্যা:

ইনপুট: 5

õ_¤q1 o Ä ço÷z w
õ           Ã       // Create a range [1...Input] [1,2,3,4,5]
 _                  // Map; At each item:
  ¤                 //   Convert to binary        ["1","10","11","100","101"]
   q1               //   Split on "1"             [["",""],["","0"],["","",""],["","00"],["","0",""]]
      o             //   Get the last item        ["","0","","00",""]
        Ä           //   Add 1                    [["1","01","1","001","1"]]
          ço        //   Fill with "o"            ["o","oo","o","ooo","o"]
             ·      // Join with new-lines        ["o\noo\no\nooo\no"]
              z     // Rotate 90 degrees          ["ooooo\n o o \n o   "]
                w   // Reverse                    ["   o \n o o \nooooo"]


@ শেগি আসলে, আপনার এমনকিl
ইটিএইচ প্রডাকশনগুলি

@ ইথ প্রডাকশনস: হ্যাঁ, সবেমাত্র তা খুঁজে পেয়েছি। 18 বাইট
শেগি


বিটওয়াইস অপারেটরগুলির সাথে একটি দুর্দান্ত কৌশলটি n&-nকেবল চূড়ান্ত 1এবং সমস্ত অনুসরণকারীকে ক্যাপচার করতে 0হয় n। এটি সাহায্য করবে কিনা তা নিশ্চিত নয় তবে এটি একটি শটের জন্য মূল্যবান ...
ETH প্রোডাকশন

2

সি, 84 74 বাইট

f(i,l,m){putchar(32+3*!(i&m));i<l?f(i+1,l,m):m?putchar(10),f(1,l,m>>1):1;}

Ungolfed:

void f(int counter, int length, int mask) {
    putchar((counter&mask) ? ' ' : '#');
    if(counter<length) {
        f(counter+1, length, mask);
    } else if(mask) {
        putchar('\n');
        f(1, length, mask>>1);
    }
}

এর সাথে পরীক্ষা করুন:

int main() {
    f(1, 32, 1023);
    putchar('\n');
    f(1, 1, 1023);
    putchar('\n');
    f(1, 999, 1023);
    putchar('\n');
}

ব্যাখ্যা

আবার, পুনরাবৃত্তি পুনরাবৃত্তির চেয়ে সিতে কম অক্ষর নেয়, সুতরাং দুটি লুপ দুটি পুনরাবৃত্তির অনুরোধ হিসাবে প্রকাশ করা হয়।

এছাড়াও, বুলিয়ান এক্সপ্রেশন সহ কৌশলগুলি খেলার জন্য সি একটি দুর্দান্ত ভাষা, খালি রাখার সিদ্ধান্ত নেওয়া বা কোনওটি #প্রকাশের মাধ্যমে প্রকাশ করা উচিত 32+3*!(i&m)। একটি স্পেসের ASCII মান 32 হয়, এটি #ASCII 35 হয়, তাই মুখোশের কোনও বিট সেট করা থাকলে আমরা একটি ফাঁকা পাই i


আপনি এমনকি প্রয়োজন int i,l,m?
জাচারা

পছন্দ করেছেন সেই 10 বাইটগুলি সংরক্ষণ করার জন্য ধন্যবাদ :-)
সিমস্টার - মনিকা

2

পাইথ , 15 বাইট

j_.tm*Nhx_.Bd1S

চেষ্টা করে দেখুন!

ব্যাখ্যা

j_.tm*Nhx_.Bd1S
    m         SQ   # map over the numbers from 0 to the implicit input (lambda variable: d)
          .Bd      # Convert d to a binary string: (12 -> 1100)
         _         # reverse: (1100 -> 0011)
        x    1     # get the location of the first 1 ( 2 )
     *Nh           # make one more than that " quotation marks (""")
 _.t               # transpose the list of quotation mark strings and reverse it
j                  # join on newline

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


1

জাভাস্ক্রিপ্ট (ES8), 71 বাইট

PadStart () ফাংশন এর নাম ECMAScript 2017 চালু হয়!

N=>eval(`for(s='',n=1;n<=N;n*=2)s='\\n'+'#'.padStart(n).repeat(N/n)+s`)


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

N=>eval(`for(s='',n=1;n<=N;n*=2)s='\\n'+(' '.repeat(n-1)+'#').repeat(N/n)+s`)


1
পুনঃটুইট
darrylyeo

1

গণিত, 69 বাইট

Rotate[Grid["#"~Table~#&/@(IntegerExponent[2*#,2]&/@Range[#])],Pi/2]&

1

( WESRRMICGSE ): 237 বাইট

IF(ROW()<=FLOOR(LOG(COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1,2),1)+2,LEFT(REPT(REPT(" ",FLOOR(POWER(2,LOG(COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1,2)-ROW()+2),1)-1) &"#",COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1),COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1),"")

ঠিক আছে। 'স্প্লাইনিং সময়।

প্রথমে, ইনপুটটির জন্য প্রতিটিকে COUNTA(R1C:R[-1]C,R[1]C:R[1024]C)+1সহজভাবে প্রতিস্থাপন [i]করুন। টোকেনটি নিজের সাথে অন্তর্ভুক্ত নয় এমন কক্ষের সংখ্যা গণনা করে যা একটি সূত্র ধারণ করে এবং তারপরে নিজেকে যুক্ত করার জন্য একটি যুক্ত করে। যেহেতু WESRRMICGSE আপনি প্রদত্ত ইনপুট অনুসারে একটি সূত্র টেনে নিয়েছেন, এই টোকেন সর্বদা ইনপুটটির ফলস্বরূপ।

আমাদের আছে:

IF(ROW()<=FLOOR(LOG([i],2),1)+3,LEFT(REPT(REPT(" ",FLOOR(POWER(2,LOG([i],2)-ROW()+2),1)-1) &"#",[i]),[i]),"")

এটি অনেক বেশি পাঠযোগ্য। আপনি FLOOR(LOG([i],2),1)টোকেনটি অনেকগুলি দেখতে যাচ্ছেন যার অর্থ সহজভাবে নিকটতম পাওয়ার 2 নেওয়া যা ইনপুট ( [i]) সংখ্যার চেয়ে কম is উদাহরণ: 4->4, 5->4, 6->4, 7->4, 8->8 ...etc। আমি এটি দিয়ে প্রতিস্থাপন করবGS[[i]]

IF(ROW()<=GS[[i]]+3,LEFT(REPT(REPT(" ",,FLOOR(POWER(2,LOG([i],2)-ROW()+2),1),1)-1) &"#",[i]),[i]),"")

উত্তম. যদি বিধিটি ভেঙে আমরা সারিটি এর চেয়ে কম বা সমান হয় তা পরীক্ষা করছি GS[[i]]+3, কারণ সমস্ত শাসকের উচ্চতা জিএসের [[i]] + 1 এর সমান, এটি সারিগুলি নির্বাচন করে যা উচ্চতার সমান হয় শাসক। +11-ইনডেক্সিং সারিগুলির +1জন্য এবং আবার WESRRMICGSE অফসেটের জন্য।

FALSEফলাফলের একটি খালি সেল ( ""), এবং একটি সত্য ফলাফলের উৎপাদনের উৎপাদLEFT(REPT(REPT(" ",,FLOOR(POWER(2,LOG([i],2)-ROW()+2),1),1)-1) &"#",[i]),[i])

বর্তমানে এখনও সম্পাদনা, সাথে থাকুন



1

k, 33 বাইট

`0:|" #"{(1+!x){~y!x}/:(x>)(2*)\1}

এটি কেবল এডাব্লু এর দোভাষীতে কাজ করে বলে মনে হচ্ছে ।

এডাব্লু এর দোভাষীতে কাজ করার উদাহরণ।

ওকে সংস্করণ (যা আপনি অনলাইনে চেষ্টা করতে পারেন) এর মধ্যে একটি বাগ রয়েছে বলে মনে হচ্ছে, এটির কাজটি করার জন্য সামান্য পরিবর্তন প্রয়োজন:

`0:|" #"{(1+!x){~y!x}/:{x>y}[x](2*)\1}

1

সি #, 174 বাইট

এই পদ্ধতিতে দুটি পরামিতি রয়েছে, শাসকের দৈর্ঘ্যের জন্য একটি ইনপুট এবং আউটপুট যা স্ট্রিং হিসাবে শাসক।

Golfed:

void R(int n,out string s){var l=new int[++n];int i,x=n,y=0;for(s="";x-->1;)for(i=0;0==(l[x]=(x>>i++&1)*i);y=y<i?i:y);for(y++;y-->0;s+='\n')for(x=0;++x<n;s+=y<l[x]?'#':' ');}

ইন্ডেন্টযুক্ত:

void R(int n,out string s){                       // Return the result in an out parameter.
    var l=new int[++n];                           // Use a 1-based array.
    int i,x=n,y=0;                                //
    for(s="";x-->1;)                              // For each number x on the ruler
        for(i=0;0==(l[x]=(x>>i++&1)*i);y=y<i?i:y) // ... find lowest set bit of x, counting the maximum value.
            ;                                     //
    for(y++;y-->0;s+='\n')                        // Count down each line.
        for(x=0;++x<n;s+=y<l[x]?'#':' ')          // Output # for numbers that are tall enough.
            ;                                     //
}

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


Func<int, string>আপনি কিছু বাইট সংরক্ষণ একটি রূপান্তর করতে চান ?
TheLethalCoder

1

কাঠকয়লা , 27 23 বাইট

↶F…·¹N«Jι⁰#W¬﹪鲫A÷ι²ι#

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা করুন: স্যুইচ করে 4 বাইট সংরক্ষণ করা হয়েছে JumpTo


এটি এখনও নিখুঁত, ঠিক এখন এটি বলা হয়েছে JumpTo(দুঃখিত)
ASCII- কেবল

@ ASCII- কেবল আহ, উইকি একটি আপডেট দিয়ে করতে পারে। (অথবা আমি ধরে নিয়েছি আপনি আমাকে সম্পাদনার অনুমতি দিতে চাইলে আমি এটি করতে পারতাম ...)
নীল

@ এএসসিআইআই-হুহ, আমার মনে রাখা উচিত ছিল কোডগলফ.স্ট্যাকেক্সেঞ্জিং . com/a/119904 থেকে ...
নীল

আপনার কি একটি গিটহাব অ্যাকাউন্ট আছে?
ASCII- কেবল

@ এএসসিআইআই-এ কেবল আমার দুটি আছে ... কোনটি বেশি উপযুক্ত তা আমি ঠিক করতে পারি না ...
নীল

1

জে, 38 বাইট

3 :'|.|:''#''#~,.(1+|.i.1:)@#:"0>:i.y'

মহান না. বাইট গণনা বন্ধ থাকলে এলএমকে - আমি আমার ফোনে আছি।


আমার কাছে 38 টি মনে হচ্ছে, যদি 3না শুরুতে ইনপুট হয় ...
ETH প্রোডাকশনগুলি

@ এথ প্রডাকশন ধন্যবাদ, লজ্জাজনক সংজ্ঞা থেকে স্যুইচিং কোনও বাইট সংরক্ষণ করেনি ...
কোলে

1
28 বাইট সহ0|.@|:'#'#"0~1#.2~:/\i.#:@,]
মাইল

0

জাভা (ওপেনজেডিকে 8) , 91 বাইট

n->{int i=10,j;String s="";for(;i-->0;s+="\n")for(j=0;j++<n;)s+=j>>i<<i<j?' ':35;return s;}

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

Ungolfed:

n->{
    int i=10,j; // Since we are allowed extra whitespace, set columns always to 10
    String s = "";
    for(;i-->0;s+="\n")      // Every iteration add a newline, i=9..0
        for(j=0;j++<n;)      // j=1..n+1
            s+= j>>i<<i<j    // if j has less than i trailing 0s in binary form
                ?' '         // add a space else
                :35          // # (java handles ternary return types weirdly)
}



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