สร้างผนังไบนารี


33

กำหนดอาร์เรย์ของจำนวนเต็มบวกในฐาน 10 ที่ซึ่งแสดงn > 0เอาต์พุตของกำแพงไบนารี

มันทำงานอย่างไร

  1. แปลงตัวเลขแต่ละตัวให้เป็นตัวแทนไบนารี
  2. Pad แทนด้วยเลขศูนย์ที่นำไปสู่ความยาวของที่ยาวที่สุดคือหนึ่ง1, 2-> ->1, 1001, 10
  3. สร้างกำแพงที่1เป็นอิฐและ0อิฐหายไป

ผนังเป็นบล็อกของตัวละครที่ตัวละครที่พิมพ์ได้ใด ๆ ที่แสดงถึงอิฐและช่องว่าง ( 32) หมายถึงอิฐที่ขาดหาย คุณสามารถเลือกตัวละครใดก็ได้สำหรับอิฐมันไม่จำเป็นต้องโดดเด่นข้ามกำแพงตราบใดที่มันไม่ใช่ตัวอักษรเว้นวรรค อักขระอิฐที่หายไปจะต้องเป็นช่องว่าง ตัวอย่างด้านล่างฉันใช้*สำหรับอิฐ

ตัวอย่าง

การป้อนข้อมูล:

[ 15, 7, 13, 11 ]
  1. [ 1111, 111, 1101, 1011 ]
  2. [ 1111, 0111, 1101, 1011 ]
  3. เอาท์พุท:

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

กฎระเบียบ

  • ต้องป้อนข้อมูลในฐาน 10 หากภาษาของคุณยอมรับฐานอื่นคุณไม่สามารถใช้งานได้
  • อนุญาตการนำขึ้นบรรทัดใหม่และต่อท้าย
  • อินพุตอาจถูกใช้เป็นรายการของจำนวนเต็มอาร์กิวเมนต์แยกหรือรูปแบบที่เหมาะสม
  • เอาต์พุตอาจอยู่ในรูปแบบที่สมเหตุสมผล: สตริงที่คั่นบรรทัดใหม่, อาร์เรย์ของบรรทัด, อาร์เรย์ 2d เป็นต้น
  • ช่องโหว่มาตรฐานไม่ได้รับอนุญาต

กรณีทดสอบ

โปรดทราบว่าในกรณีทดสอบครั้งแรกทุกชั้นมีอิฐเปล่าในตอนท้าย

[ 14, 4, 6, 2 ]

*** 
 *  
 ** 
  * 

[ 1, 2, 4, 8, 16 ]

    *
   * 
  *  
 *   
*

[ 15, 11, 15, 15 ]

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

[ 11, 10, 9, 8 ]

* **
* * 
*  *
*   

นี่คือรหัสกอล์ฟที่สั้นที่สุดที่จะชนะ!


เอาต์พุตสามารถเป็นอาร์เรย์ของบรรทัดหรืออาร์เรย์ 2d ของ chars ได้หรือไม่?
ovs

@ovs ขออภัยคิดว่าฉันได้ระบุไว้แล้วว่าใช่คุณสามารถส่งออกอาร์เรย์หรืออาร์เรย์ 2d เป็นต้นรูปแบบที่เหมาะสม
TheLethalCoder

ในกรณีของอาร์เรย์ 2D เราสามารถใช้ตัวเลขแทนอิฐแทนตัวละครได้หรือไม่? เช่น[[1, " ", 1, " "], ...]
Arnauld

@Annauld ใช่ที่ดูเหมือนดี
TheLethalCoder

1
@Giuseppe บรรทัดใหม่เท่านั้นมิฉะนั้นจะสับสนสำหรับอิฐที่ว่างเปล่า
TheLethalCoder

คำตอบ:


13

MATL , 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*หรือสิ่งที่ ...
เอริก Outgolfer

@EriktheOutgolfer ฉันสามารถเลือกหมายเลขอื่น ๆ ได้ แต่ฉันต้องการสามไบต์ที่ฉันคิด
Luis Mendo

เกิดอะไรขึ้นถ้ามี builtin ขนาด 1 ไบต์สำหรับ100หรือหมายเลขอื่น ๆ
Erik the Outgolfer



8

อ็อกเทฟ 22 ไบต์

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

ลองออนไลน์

คำอธิบาย:

บันทึกจำนวนไบต์ด้วย Luis Mendo! *นอกจากนี้ผมไม่ได้สังเกตเห็นว่าผมสามารถเลือกตัวละครที่จะสร้างผนังด้วยไม่เพียง แต่

@(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),''])

การทำงานต่อไปนี้ใน TIO เป็นเวลา 7 ไบต์ขึ้นไป:

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

ลองที่นี่


5

Python 3 , 88 84 71 74 72 ไบต์

แลมบ์ดาที่ส่งคืนรายการสตริงซึ่งแทนแต่ละบรรทัด

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

ลองออนไลน์! (ลิงก์ไปยังเวอร์ชันที่คั่นด้วย newline)

คำอธิบาย

  • lambda n:- สร้าง (ไม่ระบุชื่อ) nแลมบ์ดากับพารามิเตอร์ ส่งคืนโดยนัย

  • [...] - สร้างรายการความเข้าใจ

  • bin(x)[2:] - รับการแทนเลขฐานสองของตัวเลข

  • .replace(*'0 ')- แทนที่การเกิดขึ้นทั้งหมด0ด้วยช่องว่าง

  • .rjust(len(bin(max(n)))-2) - แผ่นตัวแทนไบนารีกับความยาวของหนึ่งที่ยาวที่สุด

  • for x in n- iterates ผ่านกับตัวแปรnx


การเปลี่ยนแปลง

  • - 1 - 3 ไบต์ขอบคุณ @Rod, -(...)+2= 2-(...), การใช้งานrjust()

  • เพิ่มรุ่นที่มีbin()แทนว่าไม่ถูกต้องเพราะมันไม่ได้ทำงานและ12

  • format()แก้ไขข้อผิดพลาดดังกล่าวข้างต้นโดยใช้

  • เปลี่ยนประเภทการส่งคืนเป็นรายการของ Strings เนื่องจาก OP อนุญาต

  • แก้ไขข้อผิดพลาดอื่นที่ใช้rjust()และเปลี่ยนกลับเป็นbin()ด่างและแก้ไขโดย @Rod


5

JavaScript (ES6), 81 79 ไบต์

บันทึก 2 ไบต์โดยใช้ตัวเลขแทนอักขระสำหรับอิฐตามที่ Rick Hitchcock แนะนำ

ส่งคืนอาร์เรย์ 2D ที่มี 1 สำหรับอิฐ

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 ไบต์ด้วยความช่วยเหลือจาก Alexis Andersen

->*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ด้วย*
Alexis Andersen

@AlexisAndersen ขอบคุณ :)
daniero

4

R , 87 88ไบต์

บล็อกผนังแสดงโดย8, เพราะ, แปดดีมาก.

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

ลองออนไลน์!

รายการจำนวนเต็มอินพุตถูกแปลงเป็นอาร์เรย์ของบิตซึ่งถูกตัดแต่งของส่วนท้าย 0 บิตและกลับด้าน

อาร์เรย์ที่ลดลงจะถูกใช้โดยใช้เอาต์พุตwriteและความกว้างของคอลัมน์ซึ่งถูกกำหนดเมื่ออาร์เรย์ถูกตัดแต่ง

ifelse() เป็นตัวเลือก IF เดียวที่ทำงานบนเวกเตอร์โชคไม่ดี


@Vlo ชี้ให้เห็นว่าคุณสามารถใช้1แทน""ไฟล์เอาต์พุตwriteได้
จูเซปเป้

@Giuseppe ขอบคุณสำหรับเคล็ดลับ
MickyT


3

APL (Dyalog) , 30 22 20 14 ไบต์

บันทึกแล้ว 6 ไบต์ขอบคุณ @ Adám

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

ลองออนไลน์!

(ถือว่า ⎕IO←0เป็นค่าเริ่มต้นในหลาย ๆ เครื่อง)

สิ่งนี้รับอินพุตเป็นอาร์เรย์และส่งกลับเมทริกซ์ด้วย*s และs

คำอธิบาย

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

บันทึก 6 bytes ด้วย' *'[⍉2⊥⍣¯1⊢⎕]
Adám

@ ¨อดัมขอบคุณสำหรับเคล็ดลับผมไม่ได้รู้ว่าฉันสามารถเอา
Kritixi Lithos

3

T-SQL, 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สำหรับงานก่ออิฐสันนิษฐานว่าอินพุตมาจากโต๊ะ@

Ungolfed มีคำอธิบายบางอย่าง

-- 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

Mathematica ขนาด 40 ไบต์

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

อิฐเป็น 1 วินาที

Mathematica, 48 ไบต์

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

อิฐเป็น #


//.คุณควรต้องหนึ่งเฉือนใน ( /.หมายถึง "แทนที่ครั้งเดียว" //.หมายถึง "ดำเนินการเปลี่ยนต่อไปจนกว่าสิ่งที่จะหยุดการเปลี่ยนแปลง".)
ไม่ใช่ต้นไม้

โอเคคงที่ขอบคุณ
J42161217

คุณไม่ต้องการช่องว่างหลังเครื่องหมายจุลภาคในฟังก์ชัน IntegerDigits
Mark S.

ใช่ฉันรู้ว่าสิ่งนี้จะเกิดขึ้นเมื่อคุณคัดลอก / วางจาก notebook.fixed
J42161217

2

C # (. NET Core) , 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เป็นตัวละครสำหรับผนัง อย่างไรก็ตามนี่เป็นวิธีที่ยาวเกินไปสำหรับ C # ...


วางnamespace System.Linq{}เพื่อบันทึกบางไบต์ มีการa.Max()รับประกันที่จะเป็นจริง (ฉันแน่ใจว่ามันคือฉันแค่ไม่ฉลาดกับไบนารี: P)? จะclass Convert{}บันทึกไบต์ใด ๆ
TheLethalCoder

1
ถ้าฉันวางโปรแกรมในเนมสเปซที่กำหนดฉันไม่ควรส่งโปรแกรมทั้งหมดแทนที่จะเป็นแลมบ์ดา? ฉันไม่แน่ใจเกี่ยวกับกฎสำหรับสิ่งนั้น ...
Charlie

ฉันมักจะอยู่ในเนมสเปซกับแลมบ์ดา ฉันไม่คิดว่าจะมีคำถามเกี่ยวกับมันและมันอยู่ในหน้าเคล็ดลับ C #
TheLethalCoder

ฉันไม่คิดว่ามันถูกต้องเนื่องจากคุณไม่สามารถรวบรวมได้โดยไม่ต้องใช้การนำเข้าคงที่
MetaColon

2
@MetaColon นั่นเป็นสาเหตุที่ฉันเพิ่มจำนวนไบต์เข้าในusing System.Linq;using C=System.Convert;จำนวนไบต์เนื่องจากusingต้องมีสองแนวทางสำหรับการคอมไพล์รหัส
Charlie

2

เรติน่า 63 ไบต์

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

ลองออนไลน์! คำอธิบาย:

.+
$*#<

<แปลงเอกและต่อท้าย

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

แปลงเป็นไบนารี

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

เมื่อรายการทั้งหมด<ถึงด้านซ้ายให้ลบทั้งหมด

m`^<
 <

แทรกช่องว่างก่อนที่ช่องใดก็ได้<ด้านซ้ายแล้ว

(.)<
<$1

ย้าย<ซ้ายทั้งหมดในขั้นตอนเดียว ล้างและทำซ้ำ


2

PowerShellขนาด 100 ไบต์

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

ลองออนไลน์!

อืมการconvertเข้าสู่ระบบเลขฐานสองใน PowerShell นั้นช่างเจ็บปวดเหลือเกิน บวก.lengthกับการโทรไป-replaceยัง0ช่องว่างพร้อมด้วย.padLeft()สายยาว ๆเพื่อให้เหมือนกันทั้งหมด.lengthทั้งหมดจะเป็นการเพิ่มการส่งที่ยาวนาน

คำแนะนำการเล่นกอล์ฟเพื่อให้ได้ต่ำกว่า 100 ยินดีต้อนรับ


2

PHP, 84 ไบต์

while(++$i<$argc)echo strtr(sprintf("\n%".-~log(max($argv),2).b,$argv[$i]),10,"* ");

โชคดีที่การทำงานของบิตนั้นlogทำให้ผลลัพธ์เป็น int ลอยจะไม่ทำงานที่นี่

ลองมันออนไลน์


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

Japt , 33 30 ไบต์

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

ลองออนไลน์!

บันทึกแล้ว 3 ไบต์ขอบคุณ@Justin Mariner

คำอธิบาย

¡                              // 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 '*'

คุณสามารถวางช่วง 3 ตัวอักษรที่จะเพียงแค่กลับอาร์เรย์ของสตริงและใช้-Rธง (ไม่ได้เพิ่มนับไบต์) เพื่อดูการส่งออกขึ้นบรรทัดใหม่เข้าร่วม: ที่นี่
Justin Mariner

2

Python 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 ทั้งหมดด้วยช่องว่าง จำนวนของช่องว่างที่มีการเพิ่มไปยังด้านหน้าของแต่ละบรรทัดที่NN = [length of longest line] - [length of line]

-1 bytes ขอบคุณ Mr. Xoder

ลองออนไลน์!


คุณไม่สามารถมีช่องว่างนำหน้าหรือต่อท้ายในเอาต์พุต
TheLethalCoder

@TheLethalCoder โอ้ต้องเข้าใจผิดกฎ! ขอบคุณสำหรับการจับที่
Graviton

90 ไบต์แทนที่ด้วย'0',' ' *'0 '
Mr. Xcoder

@ Mr.Xcoder อาน่าสนใจคงไม่มีใครคิดถึงเรื่องนี้ ขอบคุณ!
Graviton

2

Japt , 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ไม่ทำงานที่นั่นฉันจะตรวจสอบในภายหลัง ...
ETHproductions

2

Java 7, 130 108 88 ไบต์

บันทึกแล้ว 22 ขอบคุณ @TheLethalCoder บันทึกแล้ว 20 ขอบคุณ @Xanderhall

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
โพสต์ส่วนเพิ่มiที่b[i]เพื่อบันทึกไบต์ คุณสามารถเก็บเอาท์พุทได้โดย1ไม่จำเป็นต้องใช้.replace('1','*'). ใช้ Java 8 แทนและคอมไพล์ลงในแลมบ์ดาเพื่อบันทึกไบต์ หากคุณไม่ต้องการทำเช่นนั้นint[]bจะบันทึกไบต์
TheLethalCoder

ขอขอบคุณ! คุณช่วยอธิบายได้ไหมว่า "โพสต์การเพิ่มทีฉันที่ b [i] เพื่อบันทึกไบต์" หมายถึง?
Java Gonzar

i++ประเมินiจากนั้นเพิ่มขึ้น (ในขณะที่++iทำตรงกันข้าม) เพื่อให้คุณสามารถย้ายi++ออกจากforวงและใช้b[i++]แทน โอ้และในขณะที่เราอยู่ในนั้นคุณมีเพียงหนึ่งบรรทัดในวงของคุณเพื่อจัดฟันไม่จำเป็นต้องใช้
TheLethalCoder

ความจริง! น่าทึ่งขอบคุณ
Java Gonzar

2
คุณสามารถบันทึกไม่กี่ไบต์โดยสลับลูปของคุณเป็นลูป foreach for(int x:i)นอกจากนี้คุณสามารถใช้Long.toBinaryStringแทนรุ่น Integer เพื่อบันทึก 3 ไบต์
Xanderhall

1

Python 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()

การใช้งานใน Ubuntu

ติดตั้งจำนวนมาก

python2 -m pip install numpy

สร้างไฟล์ชื่อที่iมีอินพุตในรูปแบบ14 4 6 2

วิ่ง

python2 prog.py

1

8th , 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

Excel VBA, 170 161 ไบต์

แข็งแรงเล่นกอล์ฟ

ฟังก์ชั่นหน้าต่างแบบไม่ระบุชื่อ 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ι«←§ *ι≧÷²ι

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด ทำงานโดยแปลงตัวเลขอินพุตแต่ละตัวเป็นไบนารีด้วยตนเอง แต่พิมพ์ตามลำดับจากขวาไปซ้าย ฉันรับอินพุตเป็นสตริงขึ้นบรรทัดใหม่เนื่องจาก Charcoal ไม่มีวิธีการที่ดีในการป้อนรายการมิฉะนั้นฉันจะเขียนแบบนี้ซึ่งน่าเสียดายที่ปัจจุบันมีขนาด 21 ไบต์:

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด เวอร์ชันนี้จะเวกเตอร์เหนืออาร์เรย์อินพุตแม้ว่าเอาต์พุตจะถูกเข้ารหัสเป็น-s ซึ่งจะบันทึกไบต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.