আমার মেইল ​​চিহ্নিত করুন! - এএসসিআইআই বারকোডস


39

4-রাষ্ট্রের বারকোড

অনেক ডাক পরিষেবা (রয়্যাল মেল ইউকে, কানাডা পোস্ট, ইউএস মেল, ইত্যাদি) তাদের মেল সম্পর্কিত তথ্য এনকোড করতে একটি 4-রাষ্ট্রীয় বারকোড ব্যবহার করে। এএসসিআইআই-তে রেন্ডার করা, এটি দেখতে এরকম কিছু লাগতে পারে:

| | | | | | | | | |
| | | | | | | | | | | | | | | | |
    | | | | | | | |

একটি 4-রাষ্ট্রীয় বারকোড একটি সারি। প্রতিটি বার 4 টি সম্ভাবনার অনুমতি দিয়ে উপরের, নীচের দিকে বা উভয়দিকে প্রসারিত হতে পারে। এর অর্থ হ'ল প্রতিটি বার মূলত একটি বেস 4 ডিজিটের প্রতিনিধিত্ব করে:

            | |
বার: | | | |
                | |

সংখ্যা: 0 1 2 3

এই প্রতীকীকরণের সমস্যাটি হ'ল এটি প্রতিটি বারকোড একটি বৈধ, বিভিন্ন বারকোড উল্টো দিকে: অভিমুখ ভুল থাকলে সঠিকভাবে অর্থ পরিবর্তন করে। সুতরাং, একটি স্টার্ট এবং স্টপ সিকোয়েন্সটি সাধারণত প্রয়োগ করা হয় যাতে স্ক্যানারটি কোন উপায়ে পড়ার কথা তা গণনা করতে পারে।

এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা অস্ট্রেলিয়া পোস্ট দ্বারা নির্দিষ্ট করা স্টার্ট / স্টপ সিকোয়েন্সটি ব্যবহার করব: প্রতিটি বারকোড শুরু হয় এবং একটি 1 0অনুক্রমের সাথে শেষ হয় ।


চ্যালেঞ্জ

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

উদাহরণ:

পূর্ণসংখ্যা দেওয়া 19623, আমরা প্রথমে এটির বেস -4 উপস্থাপনায় রূপান্তর করব 10302213

এরপরে আমরা প্রতিটি অঙ্কটি সংশ্লিষ্ট বারে ম্যাপ করব:

1 0 3 0 2 2 1 3

| | | |
| | | | | | | |
    | | | |

অবশেষে, আমরা শুরু / স্টপ ক্রম যুক্ত করব:

শুরু শেষ:
1 0 1 0

| | | | | |
| | | | | | | | | | | |
        | | | |

ফলস্বরূপ বারকোডটি প্রোগ্রামটির আউটপুট হওয়া উচিত।


নিয়মাবলী:

  • আপনার ভাষার স্ট্যান্ডার্ড পূর্ণসংখ্যার আকারের মধ্যে ইনপুটটি ইতিবাচক পূর্ণসংখ্যার হবে।
  • আউটপুট:
    • হয় লাইনগুলির একটি তালিকা হতে পারে, বা একটি নতুন স্ট্রাইন যুক্ত স্ট্রিং।
    • যতক্ষণ না আকারটি অক্ষত থাকে ততক্ষণ শীর্ষস্থানীয় বা পিছনের নতুন লাইনের / স্পেস থাকতে পারে।
    • উপরের ফর্ম্যাট সহ বারকোডটি দেখানো উচিত - বার অঙ্কন করার সময় এটি অবশ্যই পাইপ অক্ষর ( |) এবং স্পেস ক্যারেক্টার ( ) ব্যবহার করতে হবে এবং প্রতিটি খাড়া বারের মধ্যে 1 স্পেস থাকতে হবে।
  • এটি , তাই সংক্ষিপ্ততম প্রোগ্রামটি (বাইটে) জিতে!

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

4095:

| | | | | | | |  
| | | | | | | | | |
    | | | | | |    

4096:

| | |  
| | | | | | | | | | |

7313145:

| | | | | | | | | |  
| | | | | | | | | | | | | | | |
      | | | | | | | |      

নেতৃস্থানীয় স্থান অনুমোদিত? ;)
এরিক আউটগল্ফার

@ ফ্লিপট্যাক এই প্রতীক নিয়ে সমস্যা - আপনি দ্য বোন্ডক সাধুদের দেখেন নি, তাই না?
লর্ড ফারকোয়াড

@ এরিকথিউটগল্ফার যতক্ষণ না প্রকৃত বারকোড অক্ষরের 2D ম্যাট্রিক্স হিসাবে অক্ষত থাকে ততক্ষণ এর প্রয়োজনের আগে বা পরে যতগুলি স্পেস থাকতে পারে।
ফ্লিপট্যাক

অন্যান্য বারকোড সম্পর্কিত চ্যালেঞ্জগুলি: 1 , 2 , 3
ফ্লিপট্যাক

আউটপুট নেতৃস্থানীয় শূন্য থাকতে পারে?
ব্যবহারকারী230118

উত্তর:



9

এমএটিএল , 34 30 29 28 বাইট

TFiK_YAyhhH&\EQE+t~vB!P'|'*c

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

ব্যাখ্যা

TF      % Push array [1 0] (start sequence)
i       % Push input
K_YA    % Convert to base 4. Gives an array of 4-ary digits
y       % Duplicate from below: pushes [1 0] again (stop sequence)
hh      % Concatenate horizontally twice. Gives array of 4-ary digits
        % including start and stop sequences
H&\     % Two-output modulo 2: pushes array with remainders and array
        % with quotients of dividing by 2
EQE     % Times 2, plus 1, times 2, element-wise. This effectively
        % multiplies each entry by 4 and adds 2
+       % Add element-wise to the array of remainders. The stack now 
        % contains an array of numbers 2, 3, 6 or 7. Each number
        % encodes, in binary form, a column of the output. The
        % previous multiplication of the quotients by 4 will have the
        % effect of shifting one row down (one binary digit upwards),
        % to make room for the central row. The addition of 2 will
        % create the central row, which is always full
t~      % Duplicate, logical negate. Gives an array of zeros of the
        % same length
v       % Concatenate vertically into a 2-row matrix
B       % Convert to binary. Gives a matrix, where each row is the
        % binary representation of one of the numbers of the input
        % matrix, read in column-major order
!P      % Transpose, flip vertically
'|'*    % Multiply by '|'. This transforms 1 into 124 (ASCII code of
        % '|') and leaves 0 as is
c       % Convert to char. Char 0 is shown as space. Implicitly display

8

জেলি , 16 15 বাইট

4;jƓb|ṃ⁾| ẎZṙ2G

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

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

4;jƓb|ṃ⁾| ẎZṙ2G  Main link. No arguments.

4                Set the argument and the return value to 4.
 ;               Concatenate the return value with the argument, yielding [4, 4].
   Ɠ             Read an integer n from STDIN.
  j              Join, yielding [4, n, 4].
    b            Convert 4, n, and 4 to base 4. Note that 4 is [1, 0] in base 4.
     |           Perform bitwise OR of each resulting quaternary digit and 4.
                 This pads the binary representation of a digit d to three digits: 
                 [1, d:2, d%2]
      ṃ⁾|        Convert the results to base " |", i.e., binary where ' '
                 represents 0 and '|' represents 1.
          Ẏ      Concatenate the resulting arrays that correspond to 4, n, and 4.
           Z     Zip; transpose rows and columns.
            ṙ2   Rotate 2 units yo the left, correcting the order of [1, d:2, d%2]
                 to [d%2, 1, d:2].
              G  Grid; separate columns by spaces, rows by linefeeds.

এই স্ট্রিংটি 15 ইউনিকোড অক্ষর দীর্ঘ, এটি 15 বাইট কীভাবে হতে পারে?
jmster

2
@ জেএমস্টার জেলির নিজস্ব
মিঃ এক্সকোডার

@jmster এগুলি প্রকৃত চরিত্র নয়। প্রোগ্রামটি 15 নির্দিষ্ট বাইট, যা এই স্মৃতিবিজ্ঞানগুলি রয়েছে। এটি বুবলগামের সাথে তুলনা করুন, এটি বেশিরভাগ দেখতে দেখতে লাগে .......তবে প্রতিটি বিন্দুর জন্য আলাদা বাইট থাকে।
ফ্রাউনফ্রোগ

বিটওয়াইজ বা যোগ করার পরিবর্তে কেন?
ফ্রাউনফ্রোগ 13

পুনঃটুইট করেছেন যেহেতু পরবর্তী পদক্ষেপটি বাইনারি রূপান্তরিত, তাই আমি বিটওয়াস অপারেটরের সাথে গেলাম।
ডেনিস


7

অক্টাভা , 78 77 75 74 70 69 বাইট

@(x)' |'(dec2bin([2 6 3 7;~(1:4)](:,[2 1 dec2base(x,4)-47 2 1]))-47)'

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

মূল পদ্ধতির বিপরীতে, এইটি তাদের বাইনারি সমতুল্যে বেস -4 মানগুলিতে মানচিত্রের জন্য একটি সাধারণ সন্ধানের টেবিল ব্যবহার করে। অনুসন্ধান সারণি প্রতিটি সংখ্যার মাঝে শূন্য যোগ করে (যা সমস্ত জায়গার বারে মানচিত্র দেয়) প্রতিটি বারের মধ্যে ব্যবধান যোগ করে।

দেখার টেবিলটি বারগুলিতে সরাসরি মানচিত্র করে:

   base4:  0 1 2 3 -

  lookup:  2 6 3 7 0

  binary:  0 1 0 1 0
           1 1 1 1 0
           0 0 1 1 0

বাইনারি থেকে রূপান্তরকরণ |এবং  এখন সেই দুটি অক্ষরের একটি স্ট্রিংয়ের সূচীকরণের মাধ্যমে করা হয় - মূলত বাইনারি রূপান্তরটির জন্য অনুসন্ধান টেবিলের মতো একই নীতি।


* 1 বাইট সংরক্ষণ করা হয়েছে, ধন্যবাদ @ লুইস মেন্ডো


মূল:

@(x)['' circshift(dec2bin([a=[5 4 dec2base(x,4)-44 5 4];a*0](:))'*92,1)-4384]

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

বেনামে ফাংশন যা বারকোডকে স্ট্রিং হিসাবে ফিরিয়ে দেয়।

এটি এই সত্যটির উপর ভিত্তি করে তৈরি করা হয় যে যদি আমরা বেস 4 অঙ্কগুলিতে 4 যুক্ত করি তবে আমরা 1 এবং 2 টি অদলবদল করে বাইনারি রূপান্তরিত নম্বর দ্বারা বার / স্পেস উপস্থাপন করতে পারি:

   base4:  0 1 2 3

    add4:  4 5 6 7

  binary:  0 1 0 1
           0 0 1 1
           1 1 1 1

swap 2/1:  0 1 0 1
           1 1 1 1
           0 0 1 1

একটি গল্ফিং দৃষ্টিকোণ থেকে কৌতুকপূর্ণ বিট বারগুলির মধ্যে ফাঁকা স্থান যুক্ত করছে এবং এর থেকে রূপান্তর 0/1করছে '|'/' '


1
@ লুইস মেন্ডো চালাক! ধন্যবাদ।
টম কার্পেন্টার

7

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

n=>`|  ${(g=(a,k=n)=>k?g(a,k>>2)+(k&a?'| ':'  '):' ')(1)}|
| |${g(~0)}| |
   `+g(2)

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

কিভাবে?

নোট : নীচের সংস্করণে, টেমপ্লেট লিটারালগুলি স্ট্যান্ডার্ড স্ট্রিংয়ের সাথে প্রতিস্থাপন করা হয়েছে যাতে কোডটি সঠিকভাবে ইন্টেন্ট করা যায়।

n =>                        // given the input n
  '|  ' +                   // append the top leading pattern
  (g = (a,                  // g is a recursive function taking a = mask
           k = n) =>        // and using k = value, initially set to n
    k ?                     //   if k is not zero:
      g(a, k >> 2) +        //     do a recursive call for the next group of 2 bits
      (k & a ? '| ' : '  ') //     append '| ' if the bit is set or '  ' otherwise
    :                       //   else:
      ' '                   //     append an extra leading space and stop the recursion
  )(1) +                    // invoke g() with mask = 0b01
  '|\n' +                   // append the top leading pattern and a linefeed
  '| |' +                   // append the middle leading pattern
  g(~0) +                   // invoke g() with all bits set in the mask
  '| |\n' +                 // append the middle trailing pattern and a linefeed
  '   ' +                   // append the bottom leading pattern
  g(2)                      // invoke g() with mask = 0b10

আমি এই উত্তরটি ব্যাখ্যা করে দেখতে চাই, এখানে কিছু অদ্ভুত জিনিস চলছে: পি
ব্রায়ান এইচ।

@BrianH। আমি একটি ব্যাখ্যা যুক্ত করেছি।
আর্নল্ড

4

আর , 154 109 বাইট

function(n,d=c(1,0,n%/%4^floor(log(n,4):0)%%4,1,0),o=c(" ","|"))cat("",o[1+d%%2],"
",o[2+0*d],"
",o[1+(d>1)])

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

catম্যাট্রিক্স তৈরির পরিবর্তে এবং ব্যবহারের পরিবর্তে ইনডেক্স এবং ব্যবহার করে পুরো একগুচ্ছ বাইট সংরক্ষণ করেছেন write, পাশাপাশি প্রতিটি বেসে একটি শীর্ষস্থানীয় স্থান এবং কোনও পিছনে থাকা নতুন লাইনের সাথে প্রিন্ট করবেন না 4.

সূচিটি কিছু অন্যান্য উত্তরগুলির চেয়ে পৃথক নয়, কিছু মডুলার গাণিতিক ব্যবহার করে হয়, তবে যেহেতু আরআ 1 ভিত্তিক সূচক ব্যবহার করে, পাটিগণিতটি কিছুটা আলাদা different

ব্যাখ্যা:

function(n,
 d=c(1,0,                         # d contains the padding and 
   n%/%4^floor(log(n,4):0)%%4,   # the base 4 digits
   1,0),                         # 
 o=c("|"," ")                    # the vector to index into
 cat("",                         # cat separates things with spaces by default
                                 # so the empty string will print a leading space
  o[1+d%%2],"                    # odds have a | above
",                               # literal newline, a space will follow it (hence leading spaces)
 o[2+0*d],"                      # array of 2s since the middle is always |
",                               # another literal newline
 o[1+(d>1)])                     # digits greater than 1 have a | below


3

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

NθF²⊞υι¿θWθ«⊞υ﹪θ⁴≧÷⁴θ»⊞υθF²⊞υιE⟦ |¦|¦  ||⟧⪫E⮌υ§ιλω

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

Nθ

একটি নম্বর ইনপুট করুন।

F²⊞υι

পূর্বনির্ধারিত খালি তালিকায় স্টপ ক্রমটি পুশ করুন।

¿θ

সংখ্যাটি যদি ইতিবাচক হয় তবে

  Wθ«⊞υ﹪θ⁴≧÷⁴θ»

বিপরীত বেস 4 এ রূপান্তর করতে বারবার ডিভোডাম প্রয়োগ করুন,

  ⊞υθ

অন্যথায় শুধু এটি ধাক্কা।

F²⊞υι

তালিকার প্রারম্ভিক ক্রমটি পুশ করুন।

E⟦ |¦|¦  ||⟧

তিনটি স্ট্রিংয়ের উপরে মানচিত্র। প্রতিটি স্ট্রিং 0123প্রতিটি সারির জন্য সংখ্যাগুলির জন্য বারকোড অনুবাদ উপস্থাপন করে ।

⪫E⮌υ§ιλω

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


3

জাপট , 32 31 বাইট

A¤i2Us4)¬®n s|iS)ù2 w i|1ÃqR² y

এটি অনলাইন পরীক্ষা!

এখনও এটি দিয়ে সত্যই সন্তুষ্ট নয়, তবে এটি একটি শুরু ...

ব্যাখ্যা

A¤  i2Us4)¬ ®   n s |iS)ù2 w i |1Ã qR²  y
As2 i2Us4)q mZ{Zn s'|iS)ù2 w i'|1} qRp2 y
                                           Implicit: U = input, A = 10, R = newline, S = space
As2                                        Convert 10 to a binary string.
    i2   )                                 At index 2, insert
      Us4                                    the input converted to base 4.
          q                                Split into chars.
            mZ{                  }         Map each char Z to
               Zn                            Z converted to a number,
                  s'|iS)                     converted to base " |" (binary using ' ' as 0 and '|' as 1),
                        ù2                   left-padded to length 2 with spaces,
                           w                 reversed,
                             i'|1            with another pipe inserted at index 1.
                                   q       Join the resulting list on
                                    Rp2      a newline repeated twice (adds in blank columns).
                                        y  Transpose the entire string.
                                           Implicit: output result of last expression

আপনার 32 বাইটগুলি এই সম্পূর্ণ জগাখিচুড়ি সম্পর্কে আমাকে কিছুটা ভাল বোধ করে ! দু'জনকে খালি খাওয়া এবং পান করার সময় আমার গল্ফ করার চেষ্টা করা উচিত নয়!
শেগি


3

জে , 57 49 47 বাইট

ফ্রাউনফ্রোগের জন্য 10 বাইট ধন্যবাদ!

[:,.2{."0[:|:' |'{~#:@2 6 3 7{~1 0,4&#.inv,1,0:

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

1 0,4&#.inv,1,0: - সংখ্যাটি বেস -4 সংখ্যার তালিকায় রূপান্তর করে, তালিকার শুরুতে এবং শেষে 1 টি যুক্ত করে

((#:2 6 3 7){' |') - এনক্রিপশনের জন্য সন্ধানের সারণী, বাইনারি 0 স্থানের সাথে মিল, 1 থেকে '|'

{~ - উপরে বর্ণন সারণী থেকে একটি স্ট্রিং নির্বাচন করে বেস 4 অঙ্কটি এনক্রিপ্ট করে (যুক্তিটি বিপরীত)

|: - 3 টি কলাম থেকে 3 টি সারিতে ফলাফলের অ্যারে স্থানান্তর করে

[: - কাঁটাচামচ ক্যাপ

,.2{."0 - বারগুলির মধ্যে ফাঁকা স্থান রাখে

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


নিবন্ধন করুন
গ্যালেন ইভানভ

2

এপিএল + উইন, 63 বাইট

(⍉5 3⍴' | ||  |||||   ')[;,⍉(2 1,(1+((⌈4⍟n)⍴4)⊤n←⎕),2 1),[.1]5]

ব্যাখ্যা:

(⍉5 3⍴' | ||  |||||   ') create a matrix where columns represent bars plus one for separator spaces

(1+((⌈4⍟n)⍴4)⊤n←⎕) prompt for screen input and convert to base 4 and add 1 to convert to index origin 1

2 1,...,2 1 concatenate start stop

,[.1]5 concatenate separator space indices

(.....)[.....] index into bar matrix to display


2

05 এ বি 1 , 19 বাইট

4BT.øS4~bT„| ‡øÁ€S»

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

এটি ডেনিসের দৃষ্টিভঙ্গির অর্ধ-বন্দর, যা আমি আগে যে পদ্ধতিতে ব্যবহার করেছি (তার চেয়ে আমি বেশ খুশি) তার চেয়ে মাত্র একটি বাইট কম:

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

4BT.øS2‰í1ýøT„| ‡€S»

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

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

4BT.øS2 ‰ í1ýøT "| ‡ € এস »| পুরো প্রোগ্রাম। STDIN থেকে ইনপুট নেয়, STDOUT এ আউটপুট দেয়।

4 বি | বেস 4 এ রূপান্তর করুন।
  টি | স্ট্যাকের জন্য একটি 10 ​​চাপুন।
   .ø | সুরন্ড (বেস 4 এর উপস্থাপনায় 10 টি সংযোজন এবং সংযোজন)।
     এস | স্বতন্ত্র অক্ষর / অঙ্কগুলিতে বিভক্ত করুন।
                      + + ------------------------------------------------- --------------
                      | এই অংশটি পূর্ববর্তী সংস্করণে ø4.ø4в˜ ব্যবহৃত হত, যা
                      | অর্থ: 4 এর চারপাশে, প্রতিটিকে বেস 4 এ রূপান্তর করুন (4 -> [1, 0])
                      | এবং শেষ পর্যন্ত তালিকাটি গভীর সমতল করুন
                      + + ------------------------------------------------- --------------
      2 ‰ | ডিভোড 2 ([এন // 2, এন% 2])।
        í | বিপরীত (উপাদান অনুসারে)।
         1ý | মাঝখানে একটি 1 যুক্ত করুন (উপাদান অনুসারে)।
           ø | TRANSPOSE।
            টি "| ‡ | "10" (টি) থেকে "|" („|) তে অনুবাদ করুন (‡)।
                 € এস »| গ্রিড হিসাবে ফর্ম্যাট করুন।
                 । এস | প্রত্যেকের অক্ষর পুশ করুন।
                   »| স্থানগুলি দ্বারা অভ্যন্তরীণ তালিকাগুলিতে যোগদানের সময় নতুন লাইনে যোগ দিন।

আমি জিজ্ঞাসা আদনান মধ্যে গ্রিড অপরিচিত সম্পর্কে (05AB1E স্রষ্টার) চ্যাট , এবং তারা আমাকে 2 বাইট সংরক্ষণ সাহায্য করেছে 05AB1E এর একটি বৈশিষ্ট্য ইশারা দ্বারা যখন নতুন লাইন দিয়ে বহু-dimenisional তালিকা যোগদান ভিতরের তালিকা খুব স্পেস ব্যবহার যোগদান হয় , তাই ðýঅপ্রয়োজনীয়।


2

ওহ, এভাবেই আপনার 0 0 দিয়ে ঘিরে থাকার কথা ...
ফ্রাউনফ্রগ

সুতরাং 2⊥⍣¯1আপনি কিভাবে বাইনারি তালিকা পেতে চাই?
ফ্রাউনফ্রোগ

@ ফরোনাফ্রোগের চারপাশে যাওয়ার সত্যিকারের উপায় নেই। হ্যাঁ, 2⊥⍣¯1"দ্বি-ডিকোড" এর বিপরীত ("বিপরীত"?)? এটি প্রয়োজনীয় হিসাবে অনেক বিট বাইনারি মধ্যে এনকোড।
ngn

2

জে , 42 40 39 বাইট

' |'{~[:#:4#.2|.0|:4#:@+1 0(,,[)4#.inv]

ডেনিসকে 2 বাইট শেভ করেছেন 1 বাইট এনএনজি ধন্যবাদ।

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

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

                                4#.inv]      to base 4
                        1 0(,,[)             append (1 0) on both sides
                   4#:@+                     add 4 to each digit and convert to binary
                0|:                          transpose
             2|.                             rotate the rows
      [:#:4#.             from base 4 to base 2, it's supposed to separate the columns
' |'{~                                       to characters

2

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

সংখ্যাটিকে বেস 4 এ রূপান্তর করতে .to স্ট্রিং ব্যবহার করুন এবং তারপরে প্রতিটি লাইনের সাথে কেসওয়ার্ক এবং বিটওয়াইস বা আউটপুট লাইন লাইন তৈরি করতে। লাইনগুলির একটি তালিকা আউটপুট করে।

n=>[2,3,1].map(d=>[...'10'+n.toString(4)+'10'].map(q=>(q|d)>2?"|":" ").join` `)

f = n=>[2,3,1].map(d=>[...'10'+n.toString(4)+'10'].map(q=>(q|d)>2?"|":" ").join` `)

console.log(f(19623))
console.log(f(4095))
console.log(f(4096))
console.log(f(7313145))


1
মানচিত্রের সাথে এবং বিটওয়াইসের সাথে শীতল পদ্ধতির বা! আপনি `10${n.toString(4)}10`:) ব্যবহার করে একটি পুরো বাইট সংরক্ষণ করতে পারেন :)
ক্রিস এম

2

বাশ + কোর্টিলস, 71 67 বাইট

dc -e4ddon?np|sed 's/./& /g;h;y/01/23/;G;y/12/21/;H;x;y/0123/ | |/'

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

ব্যাখ্যা

dcবেস 4, prepending এবং সঙ্গে সংযোজন করার বিট ধর্মান্তরিত 4(মধ্যে সক্রিয় 10আউটপুটে) এবং ব্যবহার nএক লাইনে সবকিছু রাখা।

বাকীটি এর মধ্যে ঘটে sed:

s/./& /g;     Add a space after each digit
h;            Make a copy in hold space
y/01/23/;     Prepare up the second row (2/3 will turn to pipes)
G;y/12/21/;   Append what will be the third row and prep it (1/3 will turn to pipes)
H;x;          Prepend hold space
y/0123/ | |/  Make 1 and 3 pipes, 0 and 2 spaces

1
ডিসি পর অংশ রূপান্তর সম্পূর্ণভাবে sed করতে কয়েক বাইট, সংরক্ষণ tio.run/##S0oszvj/PyVZQTfVJCUlP88@r6CmODVFQb1YX09fTUE/...
Kritixi Lithos

খুব সুন্দর! আমি এরকম কিছু চেষ্টা করেছিলাম তবে xচারপাশে হোল্ড / প্যাটার্ন স্পেসগুলিকে সংশোধন করতে এবং sএকবারে সমস্ত কিছু করার জন্য চালাক হওয়ার বিভিন্ন উপায়ে চেষ্টা করে চলেছি , আর কিছুই কম হয়নি।
সোফিয়া ল্যাটারের

@ কউসক্যাক আমি এমনকি আপনার ধারণার ভিত্তিতে আরও দুটি বাইট পেতে সক্ষম হয়েছি!
সোফিয়া ল্যাটারের


1

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

.+
$*
+`(1+)\1{3}
${1};
^
1;;
$
;1;;
1*;
$.&
.+
$&¶$&¶$&
T`13` `^.+
T`12` `.+$
\d
|

এটি অনলাইন চেষ্টা করুন! লিঙ্কে দ্রুত পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

.+
$*

অ্যানারিতে রূপান্তর করুন।

+`(1+)\1{3}
${1};

অবিচ্ছিন্ন সংখ্যা ;গুলি দ্বারা বিভাজিত হিসাবে বেস 4 তে রূপান্তর করুন ।

^
1;;

প্রারম্ভিক ক্রমটি প্রস্তুত করুন।

$
;1;;

একটি সংযোজনকারীর ;পরিবর্তে এটি একটি অঙ্ক টার্মিনেটরে রূপান্তরিত করুন এবং স্টপ ক্রম করুন।

1*;
$.&

দশমিক রূপান্তর করুন, তবে প্রতিটি সংখ্যায় 1 যোগ করুন।

.+
$&¶$&¶$&

এটিকে তিনবার করুন

T`13` `^.+

প্রথম সারিতে, 1গুলি এবং 3গুলি ( 0গুলি গুলি এবং 2গুলি গুলি) স্পেস হয়ে যায়।

T`12` `.+$

শেষ সারিতে, 1গুলি এবং 2গুলি ( 0গুলি এবং 1গুলি উপস্থাপন করে) স্পেস হয়ে যায়।

\d
|

অন্যান্য সমস্ত অঙ্ক বার হয়ে যায়।


1

পিপ , 33 31 29 27 26 বাইট

25 বাইট কোডের, -Sপতাকা জন্য +1 ।

Y^aTB4WRt" |"@[y%2oMyy/2]

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

ব্যাখ্যা

আমরা চারটি বারের ধরণগুলিতে পর্যবেক্ষণ করি:

  • অঙ্কটি সমান হলে প্রথম সারিটি একটি স্থান, বিজোড় হলে পাইপ।
  • দ্বিতীয় সারিতে সর্বদা পাইপ থাকে।
  • তৃতীয় সারিটি একটি স্থান যদি অঙ্ক 0 বা 1 হয় তবে পাইপ 2 বা 3 হয়।

তাই:

                           a is cmdline arg; o is 1; t is 10 (implicit)
  aTB4                     Convert a to base 4
      WRt                  Wrap it before and after with 10
 ^                         Split into a list of digits
Y                          and yank into y
              [         ]  List of:
               y%2          0 if even, 1 if odd for each item in y
                  oMy       1 mapped to y, i.e. constant 1 for each item in y
                     y/2    Each item in y divided by 2 (0, 0.5, 1, or 1.5)
         " |"@             Use the elements of that list as indices into this string
                           Note that indices are truncated to integers!
                           Autoprint, separating rows with newline and elements of
                           each row with space (-S flag)


1

সি (জিসিসি) , 176 বাইট

#include<stdio.h>
int n,m;f(n,r){if(n)f(n>>2);printf("%c%c",n?32:10,(n&r||!r)&&n?'|':32);}main(){scanf("%d",&n);m=(n+(4<<(32-__builtin_clz(n)/2*2)))*16+4;f(m,1);f(m,0);f(m,2);}

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

কিছুটা কম ভয়াবহ আকারে ফর্ম্যাট করা (কম গল্ফড):

#include<stdio.h>
int n,m;
f(n,r) {
    if(n)
        f(n>>2);
    printf("%c%c",n?32:10,(n&r||!r)&&n?'|':32);
}

main() {
    scanf("%d",&n);
    m=(n+(4<<2*(16-__builtin_clz(n)/2)))*16+4;
    f(m,1);
    f(m,0);
    f(m,2);
}

ব্যাখ্যা

প্রথমে একটি পূর্ণসংখ্যা পড়ার জন্য নীচের কোডটি বিবেচনা করুন এবং বেস 4 সংস্করণটি আউটপুট করুন:

#include <stdio.h>
int n;
f(n) {if(n)printf("%d\n",n&3,f(n>>2));}
main(){scanf("%d",&n);f(n);}

এটি আউটপুট ক্রম বিপরীতে লেজ পুনরাবৃত্তি ব্যবহার করে। প্রতিটি পুনরাবৃত্ত পদক্ষেপ বিট শিফট 2 (শেষ 2 বিট বন্ধ এবং 4 দ্বারা বিভক্ত)। এটি ফলাফলটি 3 (0 বি 11) দিয়ে বিটমাস্ক করে, যা কেবল সর্বশেষ দুটি বিট প্রদর্শন করে, যা শেষ অঙ্কের বেস 4।

ফাংশন কলটি printfএকটি পিছনের যুক্তি হিসাবে অন্তর্ভুক্ত করা হয়েছে (এটি মুদ্রিত নয়, তবে এটি মূল্যায়ন করা হয়) যাতে গ্রুপ printfএবং ফাংশন কলকে গ্রুপ করতে {} (+2 বাইট) ব্যবহার করা প্রয়োজন না হয় ।

সমাধানটি এখানে এই বেস -4 কোডটি প্রসারিত করে। প্রথমত, মিটারকে এন হিসাবে সংজ্ঞায়িত করা হয়েছে তবে বেস 4 এ এটি 10 ​​টি সংশোধন এবং সংযুক্ত করা হবে। আমরা তারপরে মি।

বেস 4 নিয়মিত মুদ্রণ করতে, আমরা 3 পেতে একটি বিটমাস্ক ব্যবহার করেছি। মেল কোডে, শীর্ষ লাইনটি হ'ল ডিজিটের লো-অর্ডার বিট (1 এর বিটমাস্ক) এবং নীচের লাইনটি হ'ল অর্ডার বিট (2 এর বিটমাস্ক)। সেই অনুযায়ী, rf(n,r)আমাদের প্রধান ফাংশন কল - বিট-মাস্কের হয় f(m,1)প্রথম লাইন এবং f(m,2)শেষ লাইনটি জন্য।

মাঝের লাইনের কাজটি করতে (সর্বদা "" "মুদ্রণ করুন), আমরা ||!rশর্তসাপেক্ষে যুক্ত করব - যদি r হয় 0, এটি সর্বদা সত্যকে মূল্যায়ন করবে এবং একটি" | "মুদ্রণ করবে। তারপরে আমরা f(m,0)মাঝের লাইনের জন্য ডাকি ।

শেষ অবধি, আমরা আচরণ করতে নিউলাইন চাই। printfসোর্স কোডের বাইটগুলি যতটা বাড়তি অন্তর্ভুক্ত করা ব্যয়বহুল, সুতরাং পরিবর্তে আমরা বিদ্যমানটিতে আরও একটি% সি নির্দিষ্টকারী যুক্ত করব printfn?32:10এন 0 (মিথ্যা) হলে একটি নিউলাইন এবং অন্যথায় একটি স্থান মুদ্রণ করে। বাইটগুলি সংরক্ষণ করতে '\ n' এবং '' এর পরিবর্তে 32 এবং 10 ব্যবহার করা হয়।


1
আপনি যদি সাবধানবাণীগুলি মনে না করেন তবে আপনি এটি 146 এ নামতে পারেন:f(n,r){n&&f(n>>2);printf("%c%c",n?32:10,(n&r|!r)&&n?'|':32);}main(n){scanf("%d",&n);f(n=(n+(4<<(32-__builtin_clz(n)/2*2)))*16+4,1);f(n,0);f(n,2);}
গ্যাস্ট্রোপনার


1

পিএইচপি, 99 + 1 বাইট

for($n=10 .base_convert($argn,10,4). 104;(~$c=$n[$i++])||3>$y+=$i=1;)echo" | ||  |||||

"[$c*3+$y];

আক্ষরিক স্ট্রিং ইনডেক্সিংয়ের জন্য পিএইচপি> = 5.5 এবং সতর্কতা না পাওয়ার জন্য সূচীকরণের জন্য <7.1 প্রয়োজন।

পাইপ হিসাবে চালনা করুন-nR বা এটি অনলাইনে চেষ্টা করুন

পেছনের দিকটি পেতে আরও একটি নতুন লাইন sertোকান।


সতর্কতা: line নং লাইনে [...] [...] তে একটি অ-সংখ্যাসূচক মানের মুখোমুখি হয়েছে
রেডক্লুভার

@ সোয়াকু পিএইচপি সংস্করণ অবশ্যই 5.5 থেকে 7.0
টিটাস

1

পাইথন 2, 142 126 বাইট

B=lambda n:n<4and`n`or B(n/4)+`n%4`
def F(i):
 for r in 0,1,2:print' '.join(" |"[(int(x)%2,1,x>'1')[r]]for x in'10'+B(i)+'10') 

ওভসকে বড় ধন্যবাদ!

আমি অন্য উত্তরগুলির পদ্ধতিগুলি এবং ... ইয়ক অনুলিপি করার চেষ্টা করেছি।



1

সি # (.নেট কোর) , 160 বাইট

i=>{string s=$"10{B(i)}10",a="";for(int y=0;y<3;y++,a+="\n")foreach(var t in s)a+=t<51&y!=1&t-(y>>1)!=49?"  ":"| ";return a;string B(int n)=>n>0?B(n/4)+n%4:"";}

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

আমি নিশ্চিত যে আমি কিছু উন্নতি মিস করেছি।

DeGolfed

i=>{
    string s = $"10{B(i)}10", // prepend and append 10 to the base 4 number
           a="";

    for (int y=0; y<3; y++, a+="\n") // go through each row
        foreach (var t in s)         // go through each char digit
            a += t<51 & y != 1 & t-(y>>1) != 49 ? "  " : "| "; // check if bar or space occurs

    return a;

    string B(int n) => n>0? B(n/4) + n%4 : ""; // convert int to base 4
}

t<51 & y != 1 & t-(y>>1) != 49 চরটি দ্বিতীয় সারিতে নয়, '3' নয় এবং প্রথম বা তৃতীয় সারিতে স্থান থাকা উচিত কিনা তা দেখার জন্য কিছু বাইনারি যাদু রয়েছে তা পরীক্ষা করে।





0

সি, 120 বাইট

দুঃখজনকভাবে শুধুমাত্র উইন্ডোজে কাজ করে, যেহেতু itoaস্ট্যান্ডার্ড হওয়ার সুবিধার্থে খুব বেশি।

char*p,s[21]="10";g(a){for(p=s;*p;)printf(!a|*p++&a?" |":"  ");puts(p);}f(n){strcat(itoa(n,s+2,4),"10");g(1);g(0);g(2);}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.