สร้างกล่องแบบไดนามิก


22

ความท้าทาย:

วาดสี่เหลี่ยมผืนผ้าของกล่อง ASCII: []

กฎระเบียบ:

รับความกว้างและความสูง

คุณสามารถสมมติว่าทั้งสองนี้เป็นตัวเลข

ต้องสร้างสตริงที่มีอักขระบรรทัดใหม่ \ n

ตัวอย่าง:

2, 2:

[][]
[][]

2, 3:

[][]
[][]
[][]

Bytes Fewest ชนะ


2
โพสต์แรกที่ดี! ยินดีต้อนรับสู่ PPCG!
MD XF

1
ฉันสามารถสรุปได้ว่าตัวเลขนั้นเป็นค่าบวกหรือไม่ มีการขึ้นบรรทัดใหม่หรือไม่
dzaima

@dzaima จำนวนเต็มบวกไม่มีส่วนท้ายหรือส่วนนำ
Robinlemon

เราสามารถพิมพ์ไปที่คอนโซลหรือเราจำเป็นต้องกลับสตริง?
Giuseppe

5
ถ้าเราไม่สามารถพิมพ์บรรทัดใหม่ต่อท้ายได้ มันเป็นแนวปฏิบัติที่ดีที่จะอนุญาตให้ขึ้นบรรทัดใหม่ได้หนึ่งบรรทัด
Destructible Lemon

คำตอบ:



4

Mathematica ขนาด 26 ไบต์

Grid@Table["[]",{#2},{#}]&

GridวัตถุMathematica นับเป็น "สตริงที่มีอักขระบรรทัดใหม่" หรือไม่?
David Zhang


4

Pyth - 7 5 ไบต์

-2 ไบต์โดยเคล็ดลับที่ชาญฉลาดต้องขอบคุณ insert_name_here

VE*`Y

ลองที่นี่

คำอธิบาย:

VE*`Y
V      # Loop
 E     # <input> number of times
   `Y  # String representation of empty list (used to be "[]", but insert_name_here pointed out this shorter alternative)
  *    # repeat string implicit input number of times
       # implicit print

3
คุณสามารถบันทึก 2 ไบต์โดยใช้`Y(แสดงสตริงของรายการที่ว่างเปล่า) "[]"แทน
insert_name_here

@insert_name_here แยบยล !! ฉันอัพเดตคำตอบแล้ว ขอบคุณสำหรับการชี้ให้เห็น!
Maria

1
มาด้วยรหัสที่แน่นอนนี้อย่างอิสระ ทำได้ดีมาก
isaacg

4

C, 47 46 ไบต์

f(w,h){for(h*=w;h--;)printf(h%w?"[]":"[]\n");}

หรือ

f(w,h){for(h*=w;h--;)printf("[]%c",h%w?0:10);}

รหัสครั้งแรกของฉันพยายามเล่นกอล์ฟฉันพลาดอะไรไปหรือเปล่า?


มีสิ่งนี้สำหรับ 45 แต่มี newline ที่จุดเริ่มต้น:f(w,h){h*=w;while(h--)printf("\n[]"+!(h%w));}
Conor O'Brien

ใช้งานได้เมื่อความกว้างคือ 2
dbandstra

ดังนั้นความผิดพลาดของฉัน
Conor O'Brien

สุดยอดกอล์ฟครั้งแรก! ยินดีต้อนรับสู่เว็บไซต์!
MD XF

1
จะไม่ใช้การforวนซ้ำทำให้รหัสสั้นลงอีกหรือ
Spikatrix


3

; # + , 197 ไบต์

>;;;;;;~++++++++:>~;;;;:>~*(-:~<~+-::>-:::<~<-+++++++++~:::<~+-:::>-::*)-::<-::::>-::(;)::>-::*(-:~<~+-::>-:::<~<-+++++++++~:::<~+-:::>-::*)-:<~<;;;;;-+>-:<-:-(-:::~<-:::(~<#<-;;-#~;)-:<#-::<;>-:-)

ลองออนไลน์! ต้องมีศูนย์ไบต์หลังจากแต่ละหมายเลขอินพุต

ฉันก็ไม่รู้เหมือนกันว่ามันทำงานอย่างไร สิ่งที่ฉันสามารถบอกคุณได้ว่าส่วนนี้ของรหัส:

 *(-:~<~+-::>-:::<~<-+++++++++~:::<~+-:::>-::*)-::<-::::>-::(;)::>-::*(-:~<~+-::>-:::<~<-+++++++++~:::<~+-:::>-::*)

กำลังแยกวิเคราะห์หมายเลขอินพุต


3

brainfuck, 145 ไบต์

+++++++++[>++++++++++<-]>+[>+>+<<-]>>++>,>+++++++++[<----->-]<--->>>,>+++++++++[<----->-]<--->++++++++++<[<<<[>+>+<<-]>[<<<.>.>>-]>[<<+>>-]>>.<-]

ลองออนไลน์!

รหัสกอล์ฟครั้งแรกของฉัน! เย้!

อินพุตอยู่ใน ascii + 48 ดังนั้นในการทำ 50, 50 คุณต้องป้อน b, b (ตัวอักษร ascii สำหรับ 98)

คำอธิบาย

+++++++++[>++++++++++<-]>+ Get the opening square bracket into first position
[>+>+<<-] Get it into the second and third position
>>++ Get the third position to be the closing bracket
>
,>+++++++++[<----->-]<--- Get first number into fourth cell
>>>
,>+++++++++[<----->-]<--- Get second number into seventh cell
>++++++++++ get newline into 8th position
<

[ Start our height loop
<<<[>+>+<<-] Get the width into the fifth and sixth positions
>[ Start our width loop at the fifth position
<<<.>. Print the second and third positions
>>-] Decrement the fifth position
>
[<<+>>-] copy the sixth position into the fourth position
>>. print newline
<-]

ประทับใจ ยินดีต้อนรับสู่เว็บไซต์! :)
DJMcMayhem

ทำไมอินพุต ASCII + 48 คุณสามารถบันทึกไบต์จำนวนมากได้โดยใช้เพียงอินพุต ASCII + 0 (อาจเชื่อมโยงไปยังรุ่น ASCII + 48 เพื่อการใช้งาน)
เครื่องคิดเลข

ฉันแค่อยากจะพบกับเกณฑ์สำหรับการป้อนข้อมูล @calculatorFeline
vityavv

...โอ้ใช่. : |
CalculatorFeline



2

เยลลี่ขนาด 7 ไบต์

ẋ⁾[]ẋ$Y

ลิงก์ dyadic ส่งคืนรายการของอักขระ (หรือโปรแกรมทั้งหมดพิมพ์ผลลัพธ์)

ลองออนไลน์!

อย่างไร?

ẋ⁾[]ẋ$Y - Main link: number w, number h          e.g. 2, 3
ẋ       - repeat w h times                            [2,2,2]
     $  - last two links as a monad:
 ⁾[]    -   literal ['[',']'],                        "[]"
    ẋ   -   repeat list (vectorises)                  ["[][]","[][]","[][]"]
      Y - join with newlines                          "[][]\n[][]\n[][]"
        - if a full program, implicit print






2

Japt , 13 12 + 1 = 14 13 ไบต์

+1 สำหรับ-Rธง

"[]"pN× òU*2

ลองออนไลน์

  • บันทึก 1 ไบต์ขอบคุณ obarakon


@ ETHproductions: การ์ตูนที่ฉันกำลังมองหา แต่เมาเกินกว่าจะหา!
Shaggy

ฮ่าฮ่าหวังว่าพวกคุณจะสนุกกันในคืนนี้ fyi U*Vสามารถย่อให้เล็กลงได้
Oliver

1
@obarakon: นั่นเป็น 2 โอกาสที่จะได้ร่วมงานกับNเมื่อคืนนี้ ไม่ดื่มเหล้า & กอล์ฟเด็ก ๆ !
Shaggy


2

ถ่าน , 8 7 ไบต์

EN×[]Iη

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

 N      First input as a number
E       Map over implcit range
      η Second input
     I  Cast to number
   []   Literal string
  ×     Repeat
        Implicitly print on separate lines

มันมีการวาดแบบดั้งเดิมสำหรับสิ่งนี้ แต่ยังมี 8 ไบต์ : P
ASCII เท่านั้น

@ ASCII เท่านั้นขออภัยฉันไม่ทราบว่า Oblong ทำงานกับสตริงโดยพลการ เรียบร้อย!
Neil

@ ASCII เท่านั้นโอ้และชื่อ verbose ของตัวแปรสตริงว่างที่กำหนดไว้ล่วงหน้าคืออะไร
Neil


@ ASCII- เท่านั้นจากนั้นฉันทำอะไรผิดที่นี่: ลองออนไลน์!
Neil

1

R , 70 ไบต์

p=paste
function(w,h)p(rep(p(rep('[]',w),collapse=''),h),collapse='
')

ลองออนไลน์!

ส่งคืนฟังก์ชันที่ไม่ระบุชื่อที่สร้างและส่งคืนสตริง

45 ไบต์ไม่สอดคล้อง

function(w,h)write(matrix('[]',w,h),'',w,,'')

ฟังก์ชั่นไม่ระบุชื่อที่พิมพ์สตริงในรูปแบบที่ต้องการ

ลองออนไลน์


1

Japtap , 7 ไบต์

6 ไบต์ของรหัส +1 สำหรับ-Rธง

VÆç"[]

ไม่ทำงานในรุ่นล่าสุดเนื่องจากข้อผิดพลาดที่มีçแต่มันไม่ทำงานในการกระทำ f619c52ทดสอบออนไลน์!

คำอธิบาย

VÆ   ç"[]
VoX{Uç"[]"}  // Ungolfed
             // Implicit: U, V = input integers
VoX{      }  // Create the range [0...V) and replace each item X with
    Uç"[]"   //   U copies of the string "[]".
-R           // Join the result with newlines.
             // Implicit: output result of last expression


1

QBICขนาด 14 ไบต์

[:|?[:|?@[]`';

คำอธิบาย:

[:|     FOR a = 1 to (read input from cmd line)
?       PRINT a newlne
[:|     FOR c = 1 to (read input from cmd line)
?@[]`   PRINT A$ (containing the box)
';         and inject a semicolon in the compiled QBasic code to suppress newlines

การดำเนินการนี้ใช้อาร์กิวเมนต์ตามลำดับ #rows, #cols เอาต์พุตเริ่มต้นด้วยการขึ้นบรรทัดใหม่



1

Bash , 55 ไบต์

seq $(($1*$2))|sed s/.*/[]/|tr -d "
"|fold -w $(($1*2))

ลองออนไลน์! ใช้รสชาติทุบตี TIO ตั้งแต่ฉันเปิดหน้าต่าง


1
ฉันไม่คิดว่าวิธีนี้ใช้กับตัวเลขหลายหลักได้
Kritixi Lithos

@KritixiLithos มันน่าจะใช้ได้แล้วตอนนี้
Conor O'Brien

1

C #, 78 ไบต์

(w,h)=>"".PadLeft(h).Replace(" ","".PadLeft(w).Replace(" ","[]")+'\n').Trim();

ทำงานใน C # Pad

นี่สั้นกว่า for-loops และฉันไม่ทราบถึงฟังก์ชั่นใด ๆ ใน C # ซึ่งสามารถทำซ้ำได้โดยใช้รหัสน้อยลง



1

JavaScript (ES6), 43 36 ไบต์

จากความคิดเห็นบรรทัดใหม่ต่อท้ายได้รับอนุญาตในขณะนี้

w=>h=>("[]".repeat(w)+`
`).repeat(h)

ลองมัน

f=
w=>h=>("[]".repeat(w)+`
`).repeat(h)
oninput=_=>o.innerText=f(+i.value)(+j.value);o.innerText=f(i.value=2)(j.value=2)
*{font-family:sans-serif;}
input{margin:0 5px 0 0;width:50px;}
<label for=i>w: </label><input id=i type=number><label for=j>h: </label><input id=j type=number><pre id=o>



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