একটি বাইনারি প্রাচীর তৈরি করুন


33

বেস 10 তে ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে দেওয়া হয়েছে, যেখানে n > 0একটি বাইনারি প্রাচীরের তাদের উপস্থাপনা আউটপুট দেয়।

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

  1. প্রতিটি সংখ্যাটিকে বাইনারি উপস্থাপনায় রূপান্তর করুন।
  2. সবচেয়ে দীর্ঘতম অর্থাৎ 1, 2-> 1, 10-> এর দৈর্ঘ্যের শীর্ষস্থানীয় শূন্যগুলির সাথে উপস্থাপনাটি প্যাড করুন 01, 10
  3. একটি প্রাচীর তৈরি করুন যেখানে 1গুলিগুলি ইটগুলি রয়েছে এবং 0এরগুলি ইট অনুপস্থিত রয়েছে।

প্রাচীর হ'ল অক্ষরগুলির একটি ব্লক যেখানে কোনও মুদ্রণযোগ্য অক্ষর একটি ইটের প্রতিনিধিত্ব করে এবং একটি স্থান ( 32) একটি অনুপস্থিত ইটের প্রতিনিধিত্ব করে। আপনি ইটের জন্য কোনও চরিত্র চয়ন করতে পারেন, যতক্ষণ না এটি কোনও সাদা স্থানের অক্ষর না হয় ততক্ষণ প্রাচীর জুড়ে আলাদা হওয়া দরকার না। অনুপস্থিত ইটের চরিত্রটি অবশ্যই একটি স্থান হবে। নীচের উদাহরণের *জন্য আমি ইটগুলির জন্য ব্যবহার করেছি ।

উদাহরণ

ইনপুট:

[ 15, 7, 13, 11 ]
  1. [ 1111, 111, 1101, 1011 ]
  2. [ 1111, 0111, 1101, 1011 ]
  3. আউটপুট:

    ****
     ***
    ** *
    * **
    

বিধি

  • ইনপুট অবশ্যই বেস 10 এ নেওয়া উচিত, যদি আপনার ভাষা অন্যান্য ঘাঁটি গ্রহণ করে আপনি সেগুলি ব্যবহার নাও করতে পারেন।
  • শীর্ষস্থানীয় এবং নতুন লাইনগুলি অনুসরণ করার অনুমতি রয়েছে।
  • ইনপুটটিকে পূর্ণসংখ্যার তালিকা, পৃথক যুক্তি বা কোনও যুক্তিসঙ্গত বিন্যাসের তালিকা হিসাবে নেওয়া যেতে পারে।
  • আউটপুট যে কোনও যুক্তিসঙ্গত বিন্যাসে থাকতে পারে: নতুন লাইন পৃথক স্ট্রিং, লাইনগুলির অ্যারে, 2 ডি অ্যারে ইত্যাদি
  • স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

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

মনে রাখবেন যে প্রথম পরীক্ষার ক্ষেত্রে সমস্ত স্তরের শেষে খালি ইট থাকে।

[ 14, 4, 6, 2 ]

*** 
 *  
 ** 
  * 

[ 1, 2, 4, 8, 16 ]

    *
   * 
  *  
 *   
*

[ 15, 11, 15, 15 ]

****
* **
****
****

[ 11, 10, 9, 8 ]

* **
* * 
*  *
*   

এটি কোড গল্ফ তাই সংক্ষিপ্ততম কোড জয়!


আউটপুটটি লাইনগুলির একটি অ্যারে বা অক্ষরের 2 ডি অ্যারে হতে পারে?
ovs

@ovs দুঃখিত ভেবেছি আমি এটি নির্দিষ্ট করে দিয়েছি, হ্যাঁ আপনি কোনও অ্যারে বা 2 ডি অ্যারে আউটপুট করতে পারেন ইত্যাদি কোনও যুক্তিসঙ্গত ফর্ম্যাট।
TheLethalCoder

2D অ্যারের ক্ষেত্রে, আমরা অক্ষরের পরিবর্তে ইটগুলির জন্য সংখ্যাগুলি ব্যবহার করতে পারি? উদাহরণস্বরূপ[[1, " ", 1, " "], ...]
আর্নৌল্ড

@ আরনাউল্ড হ্যাঁ এটা ভাল মনে হচ্ছে।
TheLethalCoder

1
@ জিউসপ্পি কেবল নতুন লাইনগুলিতে নকল করুন, অন্যথায় এটি খালি ইটের জন্য বিভ্রান্ত হবে।
TheLethalCoder

উত্তর:


13

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

B42*c

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

ব্যাখ্যা

B     % Implicitly input an array of numbers. Convert to binary. 
      % Gives a matrix with each row corresponding to a number
42    % Push 42 (ASCII code of '*')
*     % Multiply
c     % Convert to char. Char 0 is displayed as space. Implicitly display

আপনি ইটের জন্য কোনও চরিত্র চয়ন করতে পারেন, যতক্ষণ না এটি কোনও সাদা স্থানের অক্ষর না হয় ততক্ষণ প্রাচীর জুড়ে আলাদা হওয়া দরকার না। হ্যাঁ এর অর্থ সম্ভবত আপনার প্রয়োজন নেই 42*বা কিছু দরকার নেই ...
এরিক দি আউটগলফার

@ এরিকথ আউটগল্ফার আমি অন্য যে কোনও নম্বর বেছে নিতে পারি, তবে আমার মনে হয় এই তিনটি বাইটের দরকার নেই।
লুইস মেন্ডো

যদি 1 বাইট অন্তর্নির্মিত 100বা অন্য কোনও সংখ্যার জন্য থাকে তবে কী হবে ?
এরিক আউটগল্ফার



8

অক্টাভা, 22 বাইট

@(x)[dec2bin(x)-16,'']

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

ব্যাখ্যা:

লুইস মেন্ডোকে ধন্যবাদ কিছু বাইট সংরক্ষণ করা! এছাড়াও, আমি খেয়ালও করিনি যে কেবলমাত্র নয়, আমি কোন চরিত্রটি দিয়ে প্রাচীরটি তৈরি করতে পারি *

@(x)                    % Take the input as a column vector
    dec2bin(x)          % Convert each row of the input to a string with 1 and 0
                        % It gets automatically padded with zeros, to fit the longest number
    dec2bin(x)-16       % Subtract 16, to get from the ASCII-values of 1/0 (48/49)
                        % to 32/33 (space and !)
@(x)[dec2bin(x)-16,'']  % Concatenate with the empty string to convert it to a string.

বা এর সাথে de2bi:

ব্যাখ্যা:

@(x)                          % Take the input as a column vector
               de2bi(x)       % Convert each row of the input to a binary number.
                              % Gets automatically padded to fit the longest number
            42*de2bi(x)       % Multiply the matrix by 42, which is the ASCII-value for *
           [42*de2bi(x),'']   % Concatenate the matrix with the empty string to convert
                              % it to a string. 0 are automatically displayed as spaces
@(x)fliplr([42*de2bi(x),''])

নীচে টিআইওতে আরও 7 বাইটের জন্য কাজ করে:

@(x)fliplr([42*(dec2bin(x)>48),''])

এখানে চেষ্টা করুন


5

পাইথন 3 , 88 84 71 74 72 বাইট

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

lambda n:[bin(x)[2:].replace(*'0 ').rjust(len(bin(max(n)))-2)for x in n]

এটি অনলাইন চেষ্টা করুন! (নিউলাইন পৃথক সংস্করণে লিঙ্ক করুন)

ব্যাখ্যা

  • lambda n:- একটি প্যারামিটার সহ একটি (বেনামে) ল্যাম্বদা তৈরি করে n। সুস্পষ্টভাবে ফিরে আসে।

  • [...] - একটি তালিকা বোধগম্যতা তৈরি করে।

  • bin(x)[2:] - সংখ্যাগুলির বাইনারি উপস্থাপনা পান।

  • .replace(*'0 ')- 0একটি স্থানের সাথে সমস্ত ঘটনাকে প্রতিস্থাপন করে ।

  • .rjust(len(bin(max(n)))-2) - দীর্ঘতম দৈর্ঘ্যের বাইনারি উপস্থাপনা প্যাড।

  • for x in n- nপরিবর্তনশীল সহ, এর মাধ্যমে পরিমাপ করা x


পরিবর্তণের

  • - 1 - 3 বাইট @ রড, -(...)+2= এর 2-(...)ব্যবহারকে ধন্যবাদrjust()

  • সঙ্গে একটি সংস্করণ যোগ করা হয়েছে bin()যে অবৈধ ছিল যেহেতু এটি জন্য কাজ না করে পরিবর্তে, 1এবং 2

  • উপরের বাগটি ব্যবহার করে ঠিক করা হয়েছে format()

  • স্ট্রিংগুলির তালিকায় রিটার্নের ধরন পরিবর্তিত হয়েছে, কারণ এটি ওপি দ্বারা অনুমোদিত ছিল।

  • @ রড দ্বারা দাগযুক্ত এবং ফিক্স ব্যবহার করে rjust()এবং ফিরে স্যুইচিংয়ে আরও একটি বাগ ফিক্সড bin()


5

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

রিক হিচককের পরামর্শ অনুসারে ইটের জন্য অক্ষরের পরিবর্তে সংখ্যা ব্যবহার করে 2 বাইট সংরক্ষণ করা হয়েছে

ইটগুলির জন্য 1 এর সাথে একটি 2D অ্যারে প্রদান করে।

f=(a,b=[],x=1)=>a.every(n=>n<x)?a.map(n=>b.map(i=>n&i?1:' ')):f(a,[x,...b],x*2)

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




4

রুবি, 63 59 বাইট

অ্যালেক্সিস অ্যান্ডারসনের সাহায্যে -4 বাইট

->*n{puts n.map{|i|("%#{('%b'%n.max).size}b"%i).tr'0',' '}}

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


1
আপনার স্ট্রিং ফর্ম্যাটে 0 দরকার নেই। আপনি প্রতিস্থাপন দ্বারা একটি বাইট শেভ পারে n.max.to_s(2).sizeসঙ্গে ('%b'%n.max).sizeএবং আপনি আসলে প্রতিস্থাপন করার প্রয়োজন হবে না 1সঙ্গে*
অ্যালেক্সিস অ্যান্ডারসনকে

@ অ্যালেক্সিস অ্যান্ডারসন ধন্যবাদ :)
দানিরো

4

আর , 87 88 বাইট

ওয়াল ব্লকগুলি একটি দ্বারা প্রতিনিধিত্ব করা হয় 8, কারণ, বেশ ভাল রাত।

write(ifelse((I=sapply(scan(),intToBits))[(M=max(which(I>0,T)[,1])):1,],8,' '),1,M,,'')

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

ইনপুট পূর্ণসংখ্যা তালিকা বিটের অ্যারেতে রূপান্তরিত হয় যা 0 বিটকে পিছনে ছাঁটাই করে বিপরীত করা হয়।

হ্রাস করা অ্যারেটি তখন আউটপুট ব্যবহার করে write এবং কলামের প্রস্থ যা অ্যারে ছাঁটাই করা হয় তা নির্ধারণ করা হয়েছিল।

ifelse() দুর্ভাগ্যক্রমে ভেক্টরগুলিতে একমাত্র আইএফ বিকল্পটি কাজ করে।


@ ভলো আপনাকে আউটপুট ফাইলের 1পরিবর্তে ব্যবহার করতে পারবেন তা উল্লেখ করে । ""write
জিউসেপে

@ জিউসেপ টিপটির জন্য ধন্যবাদ
মিকিটি


3

এপিএল (ডায়ালগ) , 30 22 20 14 বাইট

@ অ্যাডম ধন্যবাদ 6 বাইট সংরক্ষণ করা

' *'[⍉2⊥⍣¯1⊢⎕]

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

( ⎕IO←0অনেকগুলি মেশিনে এটি ডিফল্ট হিসাবে ধরে নেওয়া হয়)

এটি একটি অ্যারের হিসাবে ইনপুট নেয় এবং *এস এবং এস সহ একটি ম্যাট্রিক্স দেয় ।

ব্যাখ্যা

2⊥⍣¯1⊢⎕       Convert input to binary (returns a transposed matrix of 1s and 0s)
              Transpose
' *'[ ... ]    Index into this string

6 বাইটের সাহায্যে সংরক্ষণ করুন' *'[⍉2⊥⍣¯1⊢⎕]
Adám

@ অ্যাডম টিপসের জন্য ধন্যবাদ, আমি জানতাম না যে আমি এগুলি সরাতে পারি ¨
ক্রিটিকি লিথোস

3

টি-এসকিউএল, 290 বাইট

declare @ int;select @=max(log(a,2))+1from @i;with t as(select convert(varchar(max),a%2)b,a/2c,@-1m,ROW_NUMBER()over(order by(select 1))r from @i union all select convert(varchar(max),concat(c%2,b))b,c/2c,m-1,r from t where m>0)select replace(b,0,' ')from t where m=0group by r,b order by r

1ইটের টুকরা জন্য ব্যবহার করে , ধরে নেওয়া হয় ইনপুটটি টেবিল থেকে আসে@

কিছুটা ব্যাখ্যার সাথে অবহেলিত

-- assume input is presented in an input table
declare @input table (a int)
insert into @input values (15), (7), (13), (11)

---- start here

-- figure out how many characters are needed, by taking log2
declare @max int
select @max = max(log(a, 2)) + 1
from @input

-- recursive cte
-- will join against itself, recursively finding each digit in the binary string
;with cte as
(
    select 
        convert(varchar(max), a % 2) as b, -- is the least significant bit 1 or 0
        a / 2 as c, -- remove least significant bit, for the next run
        @max - 1 as max, -- keep track of iterations left
        ROW_NUMBER() over (order by (select 1)) as rn -- keep the order of the input
    from @input

    union all -- recursive loop
              -- below columns follow the same pattern

    select convert(varchar(max), 
        concat(cte.c % 2, cte.b)) as b, -- prepend the current binary string with the newest least significant bit
        cte.c / 2 as c, 
        cte.max - 1, 
        cte.rn
    from cte
    where cte.max > 0
)
select replace(b, 0, ' ') -- swap 0s for space
from cte
where max = 0 -- only take the last iteration
group by rn, b -- grab each unique input, 
               -- need to group by row number so it can be ordered by
               -- need to group by binary string, so it can be selected
order by rn -- sort by the order the input arrived in

3

গণিত, 40 বাইট

Grid@PadLeft@IntegerDigits[#,2]/. 0->""&

ইট 1s হয়

গণিত, 48 বাইট

Grid@PadLeft@IntegerDigits[#,2]/.{0->"",1->"#"}& 

ইটগুলি হল #


আপনার কেবলমাত্র একটিতে স্ল্যাশ দরকার //.। ( /.যার অর্থ "একবার প্রতিস্থাপন করুন", তার //.অর্থ "জিনিসটি পরিবর্তন না হওয়া অবধি প্রতিস্থাপনটি চালিয়ে যান")
একটি গাছ নয়

ঠিক আছে - ধন্যবাদ
J42161217

পূর্ণসংখ্যা ডিজিটস ফাংশনে কমা করার পরে আপনার স্থানের দরকার নেই।
মার্ক এস।

হ্যাঁ, আমি জানি, আপনি যখন নোটবুক থেকে অনুলিপি / পেস্ট করবেন তখনই এটি ঘটে
J42161217

2

সি # (.নেট কোর) , 112 + 18 = 130 86 + 41 = 127 বাইট

a=>a.Select(n=>C.ToString(n,2).Replace("0"," ").PadLeft(C.ToString(a.Max(),2).Length))

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

বাইট গণনা থেকে 41 বাইট অন্তর্ভুক্ত using System.Linq;using C=System.Convert;। ব্যবহার 1প্রাচীর জন্য চরিত্র হিসেবে। তবুও, এটি সি # এর জন্যও অনেক দীর্ঘ ...


namespace System.Linq{}কিছু বাইট সংরক্ষণ করার জন্য রাখুন । হয় a.Max()সত্য হতে নিশ্চিত (: পি আমি নিশ্চিত এটা আমি শুধু বাইনারি সঙ্গে বুদ্ধিমান নই)? class Convert{}কোন বাইট সংরক্ষণ করতে চান ?
TheLethalCoder

1
যদি আমি প্রোগ্রামটি একটি নির্দিষ্ট নামস্থানে রাখি, তবে আমি কেবল একটি ল্যাম্বডা পরিবর্তে পুরো প্রোগ্রামটি জমা দেব না? আমি তার নিয়মগুলি সম্পর্কে নিশ্চিত নই ...
চার্লি

আমি সাধারণত লাম্বদা সহ নেমস্পেসে রেখেছি। আমি মনে করি না যে এটি সম্পর্কে কখনই কোনও প্রশ্ন ছিল এবং এটি সি # টিপস পৃষ্ঠায় রয়েছে।
TheLethalCoder

আপনি স্থির আমদানি ব্যবহার না করে এটি সংকলন করতে পারবেন না বলে এটি বৈধ বলে আমি মনে করি না।
मेटाটাওন

2
@ মেটা কলোন এ কারণেই আমি using System.Linq;using C=System.Convert;বাইট গণনাতে বাইটগুলি যুক্ত করেছি কারণ usingকোডটি সংকলনের জন্য এই দুটি নির্দেশের প্রয়োজন।
চার্লি

2

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

.+
$*#<
+`(#+)\1
$1 
 #
#
{T`<`_`^(<.+(¶|$))+$
m`^<
 <
(.)<
<$1

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

.+
$*#<

অ্যানারিতে রূপান্তর করুন এবং প্রত্যয় ক <

+`(#+)\1
$1 
 #
#

বাইনারি রূপান্তর করুন।

{T`<`_`^(<.+(¶|$))+$

সমস্ত <গুলি বামে পৌঁছে সমস্তগুলি মুছুন।

m`^<
 <

<ইতিমধ্যে বামে পৌঁছেছে এমন যে কোনও স্থানের আগে একটি স্থান োকান।

(.)<
<$1

সমস্ত <বাম এক ধাপে সরান । পাখলান পুনরাবৃত্তি.


2

পাওয়ারশেল , 100 বাইট

$args|%{if(($c=($a=[convert]::ToString($_,2)).length)-gt$l){$l=$c}$a-replace0,' '}|%{$_.padleft($l)}

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

ওহ, convertপাওয়ারশেলের বাইনারিগুলিতে লিপ্ত হওয়া এত বেদনাদায়ক। প্লাস .lengthy টু কল ব্যবধান সহ, প্লাস একটি দীর্ঘ-replace0.padLeft() কল তাদের সব একই করতে.length , সমস্ত একটি দীর্ঘ জমা পর্যন্ত যোগ করে।

100 এর নিচে পেতে গল্ফিং পরামর্শগুলি স্বাগত are



2

Clojure, 185 বাইট

(fn[i](let[b(map #(Long/toBinaryString %)i)](map #(clojure.string/replace(clojure.string/replace(format(str"%0"(reduce(fn[l i](max l(count i)))0 b)"d")(read-string %))"1""#")"0"" ")b)))

অবরুদ্ধ সংস্করণ:

(fn [i]
    (let [b (map #(Long/toBinaryString %) i)]
        (map
            #(clojure.string/replace
                (clojure.string/replace
                    (format
                        (str "%0"
                            (reduce
                                (fn [l i] (max l(count i))) 0 b)
                            "d")
                        (read-string %))
                        "1"
                        "#")
                "0"
                " ")
        b)))

অজ্ঞাতনামা ফাংশন যা যুক্তিটিকে তালিকা হিসাবে গ্রহণ করে। তালিকা হিসাবে লাইনগুলি ফিরিয়ে দেয়।

অন্যান্য উত্তরগুলি পড়তে, আমি বাজি ধরছি এটি আরও ছোট হতে পারে। clojure.string/replaceলেখার জন্য একটি অশ্লীল পরিমাণ গ্রহণ করে ..


2

জাপট , 33 30 বাইট

¡'0p(¡X¤lÃn o)-X¤l)+X¤)£" *"gX

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

জাস্টিন মেরিনারকে 3 টি বাইট সংরক্ষণ করা হয়েছে

ব্যাখ্যা

¡                              // map input integers
    (¡X¤lÃn o)                 // longest binary string length
              -X¤l)            // minus current binary string length
 '0p                           // repeat zero
                   +X¤)        // concat with current binary string
                       £       // map chars of binary string
                        " *"gX // swap 0 and 1 with ' ' and '*'

আপনি কেবল মাত্র তিনটি অক্ষর কেবলমাত্র একটি স্ট্রিংয়ের অ্যারে ফিরিয়ে দিতে এবং -Rপতাকাটি ব্যবহার করতে পারেন (বাইট গণনাতে যোগ করা হয়নি) নতুন লাইন-যুক্ত হওয়া আউটপুট দেখতে: এখানে
জাস্টিন মেরিনার

2

পাইথন 3 , 92 90 বাইট

lambda a:[' '*(len(bin(max(a)))-len(i)-2)+i for i in[bin(i)[2:].replace(*'0 ')for i in a]]

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

লাইনের একটি তালিকা ফেরত দেয়। তাদের স্ট্যাক করে দেখায় যে তারা সত্যই সঠিকভাবে প্রান্তিককরণ করেছে।

['111 ', ' 1  ', ' 11 ', '  1 ']
>>>
 111 
  1  
  11 
   1 

ভাঙ্গন

মূলত অ্যারেটিকে বাইনারিতে রূপান্তরিত করে, তারপরে সমস্ত 0 টিকে স্পেস দিয়ে প্রতিস্থাপন করে। Nপ্রতিটি লাইনের সম্মুখভাগে স্পেসের সংখ্যা যুক্ত করা হয় যেখানেN = [length of longest line] - [length of line]

-1 bytes জনাব জোডারকে ধন্যবাদ

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


আউটপুটে আপনার অগ্রণী বা পিছনের স্থান থাকতে পারে না।
TheLethalCoder

@ লেটলকোডার ওহ, বিধিগুলি অবশ্যই ভুল লিখেছেন! এটি ধরার জন্য ধন্যবাদ
গ্রাভিটন

90 বাইট , '0',' 'সঙ্গে প্রতিস্থাপন *'0 '
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার আহ আকর্ষণীয়, এটি সম্পর্কে কখনও ভাবেননি। ধন্যবাদ!
গ্রাভিটন

2

জাপট , 11 বাইট

m¤z3 z ·r0S

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

ব্যাখ্যা

m¤z3 z ·r0S  Implicit input of array
m¤           Map the array to binary strings
  z3 z       Rotate right 270° and then right 90°. This adds left padding to each string
       ·r0S  Join with newlines and replace 0s with spaces

সাথে সুন্দর শোষণ z3 z। কেন y yসেখানে কাজ করে না তা নিশ্চিত নয়, আমি পরে এটি
যাচাই

2

জাভা 7, 130 108 88 বাইট

@ দ্য লেথলকোডারকে 22 টি ধন্যবাদ ধন্যবাদ সংরক্ষণ করা হয়েছে @ এক্সান্দারহলে 20 টি ধন্যবাদ

void a(int[]b){for(int i:b)System.out.println(Long.toBinaryString(i).replace('0',' '));}

Ungolfed:

void a(int[]b){
    for(int i:b)
        System.out.println(Long.toBinaryString(i).replace('0', ' '));       
}

1
পোস্ট ইনক্রিমেন্ট ib[i]একটি বাইট সংরক্ষণ করুন। আপনি আউটপুটটি 1তাই দিয়ে রাখতে পারেন যাতে প্রয়োজন হয় না .replace('1','*')। পরিবর্তে জাভা 8 ব্যবহার করুন এবং বাইটস সংরক্ষণ করতে ল্যাম্বডায় সংকলন করুন। আপনি যদি এটি না করতে চান তবে int[]bএকটি বাইট সংরক্ষণ করে।
দ্য লেথালকোডার

ধন্যবাদ! আপনি কি দয়া করে ব্যাখ্যা করতে পারেন "বাইট সংরক্ষণ করতে আমি [ইন বি ইনক্রিমেন্ট পোস্ট করুন [i]" " কারে কয়?
জাভা গঞ্জার 12

i++এর iপরে মূল্যায়ন করে এটি বৃদ্ধি করে (যেখানে ++iবিপরীত রয়েছে) যাতে আপনি লুপের i++বাইরে চলে যেতে পারেন forএবং b[i++]পরিবর্তে ব্যবহার করতে পারেন । ওহ এবং যখন আমরা এটি পেয়েছি তখন আপনার লুপের ভিতরে কেবলমাত্র একটি লাইন থাকে যাতে ধনুর্বন্ধনী প্রয়োজন হয় না।
লেটলকোডার

সত্য! আশ্চর্যজনক, আপনাকে ধন্যবাদ
জাভা গঞ্জার

2
আপনার লুপটি একটি ফোরচ লুপে স্যুইচ করে আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন। for(int x:i)এছাড়াও, আপনি Long.toBinaryString3 বাইট সংরক্ষণের জন্য পূর্ণসংখ্যার সংস্করণের পরিবর্তে ব্যবহার করতে পারেন ।
জ্যান্সারহাল

1

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

কোডিংয়ের 2 ঘন্টা পরে আমি সিদ্ধান্ত নিয়েছি, সেই নম্পটি এটির জন্য খারাপ ধারণা

import numpy as n
i=n.loadtxt("i")
o=[n.copy(i)]
o[0].fill(10)
while n.count_nonzero(i)>0:
 o.append(i%2+32)
 i=n.vectorize(lambda x:x//2)(i)
print n.fliplr(n.array(o).T).astype('uint8').view('c').tostring().decode()

উবুন্টু ব্যবহার

ন্যালি ইনস্টল করুন

python2 -m pip install numpy

iফর্ম্যাট ইনপুট সহ ফাইল তৈরি করুন14 4 6 2

চালান

python2 prog.py

1

8 ম , 232 254 250 বাইট

কোড

0 >r a:new swap ( nip 2 base drop >s decimal s:len r> n:max >r a:push ) a:each drop a:new swap ( nip '0 G:c# r@ G:#> s:fmt a:push ) a:each drop rdrop a:new swap ( nip /0/ " " s:replace! a:push ) a:each drop ( nip /1/ "*" s:replace! . cr ) a:each drop

মন্তব্য সহ দর্শনীয় সংস্করণ

\ convert to binary and save longest string length
: f 0 >r a:new swap ( nip 2 base drop >s decimal s:len r> n:max >r a:push ) a:each drop ;

\ pad binary number with zero
: f1 a:new swap ( nip '0 G:c# r@ G:#> s:fmt a:push ) a:each drop rdrop ;

\ replace every 0 with space
: f2 a:new swap ( nip /0/ " " s:replace! a:push ) a:each drop ;

\ replace every 1 with * and print each line of bricks
: f3 ( nip /1/ "*" s:replace! . cr ) a:each drop ;

এই শব্দগুলি অবশ্যই অনুক্রমের সাথে যুক্ত করা উচিত (উদাহরণ দেখুন)

ব্যবহার এবং উদাহরণ

ok> [15,7,13,11] 0 >r a:new swap ( nip 2 base drop >s decimal s:len r> n:max >r a:push ) a:each drop a:new swap ( nip '0 G:c# r@ G:#> s:fmt a:push ) a:each drop rdrop a:new swap ( nip /0/ " " s:replace! a:push ) a:each drop ( nip /1/ "*" s:replace! . cr ) a:each drop
****
 ***
** *
* **

বা আরও পরিষ্কারভাবে

ok> [15,11,15,15] f f1 f2 f3
****
* **
****
****


1

এক্সেল ভিবিএ, 170 161 বাইট

Golfed

বেনামে VBE তাত্ক্ষণিক উইন্ডো ফাংশন যা 1 2 3 .. nপরিসীমা থেকে ফর্ম্যাটটির ইনপুট নেয় [A1]এবং বাইনারি প্রাচীরটিকে VBE ইমিডিয়েটে উইন্ডোতে পরিসরের মাধ্যমে আউটপুট দেয়[B1,C1,2:2]

n=Split([A1]):[A2].Resize(1,UBound(n)+1)=n:[C1]="=Int(1+Log(B1,2))":For Each i In n:[B1]=i:?Replace(Replace([Right(Rept(0,C1)&Dec2Bin(B1),C1)],1,"*"),0," "):Next

বিন্যাসকৃত:

n=Split([A1])
[A2].Resize(1,UBound(n)+1)=n
[C1]="=Int(1+Log(B1,2))"
For Each i In n
[B1]=i
?Replace(Replace([Right(Rept(0,C1)&Dec2Bin(B1),C1)],1,"*"),0," ")
Next

Ungolfed

সম্পূর্ণ Subরুটিন যা বিন্যাসের ইনপুট নেয় Array(1, 2, 3...)এবং পরিসরের মাধ্যমে VBE তাত্ক্ষণিক উইন্ডোতে সম্পর্কিত বাইনারি প্রাচীরটিকে আউটপুট করে[A1,B1,2:2]

Sub a(ByRef n As Variant)
    Let Range("A1").Resize(1,UBound(n)+1) = n
    Let Range("C1").Value = "=Int(1+Log(A1,2))"
    Dim i As Integer
    For Each i In n
        Let Range("A1").Value = i
        Debug.Print Replace(
                            Replace(
                                    [Right( Rept( 0, C1) & Dec2Bin( B1), C1)],
                                    1,
                                    "*"
                            ),
                            0,
                            " "
                    )
    Next
End Sub

1

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

WS«⸿≔IιιWι«←§ *ι≧÷²ι

এটি অনলাইন চেষ্টা করুন!লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। প্রতিটি ইনপুট নম্বর ম্যানুয়ালি বাইনারি রূপান্তর করে কিন্তু ডান থেকে বাম ক্রমে মুদ্রণ করে কাজ করে। আমি ইনপুটটিকে একটি নিউলাইন টার্মিনেটেড স্ট্রিং হিসাবে গ্রহণ করি কারণ চারকোলের তালিকা ইনপুট করার ভাল উপায় নেই অন্যথায় আমি এই জাতীয় কিছু লিখতে পারি যা দুর্ভাগ্যক্রমে বর্তমানে 21 বাইট লাগে:

WS⊞υIιW⌈υ«Eυ﹪κ²↓⸿≧÷²υ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। এই সংস্করণটি ইনপুট অ্যারের উপরে ভেক্টরাইজ করে, যদিও এর আউটপুটটি হার্ড-কোড করা হয় -যা বাইট সংরক্ষণ করে।

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