Dinamik olarak Kutu Oluşturma


22

Meydan okuma:

Bir ASCII kutuları dikdörtgenini çizin: []

Kurallar:

Genişlik ve yükseklik girişi alır

İkisinin de sayı olduğunu varsayabilirsiniz

Yeni satır karakterleriyle bir dize üretmeli, \ n

Örnekler:

2, 2:

[][]
[][]

2, 3:

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

En az bayt kazanır.


2
Güzel ilk mesaj! PPCG'ye Hoşgeldiniz!
MD XF

1
Sayıların pozitif olduğunu varsayabilir miyim? İzleyen yeni hatlar olabilir mi?
dzaima

@dzaima Olumlu tamsayılar, iz yok ya da lider şeyler yok
Robinlemon

Konsola yazdırabilir miyiz yoksa dizgiyi döndürmemiz gerekir mi?
Giuseppe

5
kelimenin tam anlamıyla izleyen yeni satırları yazdıramıyorsak ne olur? bu, bir arka satır izin vermek için iyi bir uygulama olarak görülmektedir
tahrip limon

Yanıtlar:


6

SOGL , 5 bayt

Ƨ[]*∙

Basit:

Ƨ[]    push "[]"
   *   multiply horizontally (repeating width times)
    ∙  get an array with input (height) items of that
       implicitly output the array joined with newlines

4

Mathematica, 26 bayt

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

Bir Mathematica Gridnesnesi "yeni satır karakterli bir dize" olarak mı sayılır?
David Zhang,

4

MATL , 7 bayt

v&DiiX"

Çevrimiçi deneyin!

açıklama

v    % Concatenate the (non-existing) stack contents: gives []
&D   % String representation: gives '[]'
ii   % Take two inputs
X"   % Repeat those numbers of times vertically and horizontally. Implicit display

4

Pyth - 7 5 bayt

İnsert_name_here sayesinde akıllı bir numara ile -2 bayt

VE*`Y

Burada dene

Açıklama:

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 bayt `Yyerine (boş listenin dize gösterimini) kullanarak tasarruf edebilirsiniz "[]".
insert_name_here

@ insert_name_here Yaratıcı! Cevabı güncelledim. Bunu işaret ettiğin için teşekkürler!
Maria,

1
Bağımsız olarak bu kesin kod ile geldi. Güzel bitti.
isaacg

4

C, 47 46 bayt

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

veya

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

İlk kod golf denememde bariz bir şey mi kaçırdım?


Bu 45 için var, ama başında yeni bir hat var:f(w,h){h*=w;while(h--)printf("\n[]"+!(h%w));}
Conor O'Brien

Bu sadece genişlik 2 olduğunda çalışır.
dbandstra

Yani, benim hatam
Conor O'Brien

Harika ilk golf! Siteye Hoşgeldiniz!
MD XF

1
Bir fordöngü kullanmak kodu daha da kısaltmaz mıydı?
Spikatrix


3

; # + , 197 bayt

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

Çevrimiçi deneyin! Her giriş numarasından sonra sıfır bayt gerektirir.

Bunun nasıl çalıştığını bilmiyorum. Size söyleyebileceğim, kodun bu kısmı:

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

giriş numaralarını ayrıştırıyor.


3

brainfuck, 145 bayt

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

Çevrimiçi deneyin!

Benim ilk golf kodlarım! Yuppi!

Giriş ascii + 48, yani 50, 50 yapmak için b, b (98 için ascii harfleri) girmelisiniz

açıklama

+++++++++[>++++++++++<-]>+ 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
<-]

Etkileyici. Siteye Hoşgeldiniz! :)
DJMcMayhem

Giriş ASCII + 48 neden? Sadece ASCII + 0 girişini kullanarak (muhtemelen kullanılabilirlik için ASCII + 48 sürümüne bağlanır) kullanarak çok fazla bayt kaydedebilirsiniz
CalculatorFeline

Sadece giriş kriterlerini karşılamak istedim, @calculatorFeline
vityavv

... Ah doğru. : |
Hesap MakinesiFeline



2

Jöle , 7 bayt

ẋ⁾[]ẋ$Y

Karakter listesini döndüren ikili bir bağlantı (veya sonucu basan tam bir program).

Çevrimiçi deneyin!

Nasıl?

ẋ⁾[]ẋ$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

Ohm, 9 bytes

M"[]"َJ,    

Try it online!

Explanation

M"[]"َJ,
M         //Executes code input1 times
 "[]"     //Pushes []
     َ   //Duplicates [] input2 times
       J  //Joins the stack
        , //Prints with a trailing newline

2

PowerShell, 25 Bytes

param($w,$h),("[]"*$w)*$h

-3 thanks to Mathias!


You can shorten it to 25 like so: param($w,$h),("[]"*$w)*$h
Mathias R. Jessen

2

Japt, 13 12+1= 14 13 bytes

+1 for the -R flag.

"[]"pN× òU*2

Try it online

  • 1 byte saved thanks to obarakon.

Being a little drunk can sometimes help your programming skills though :P
ETHproductions

@ETHproductions: the very cartoon I was looking for but was too drunk to find!
Shaggy

Haha, hope you guys are having a fun night. fyi, U*V can be shortened to
Oliver

1
@obarakon: That's 2 opportunities to work with N last night. Never drink & golf, kids!
Shaggy

2

APL (Dyalog), 11 bytes

'[]'⍴⍨⊢,2×⊣

Try it online!

'[]' the string

⍴⍨ cyclically repeated to fill the shape

 right argument (rows)

, and

 twice

the left argument (columns)


2

Charcoal, 8 7 bytes

EN×[]Iη

Try it online! Link is to verbose version of code. Takes input in the order height, width. Charcoal's drawing primitives aren't suited to this, so this just takes the easy way out and repeats the [] string appropriately. Explanation:

 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

Well it has drawing primitives for this but still 8 bytes :P
ASCII-only

@ASCII-only Sorry, I didn't realise that Oblong worked on arbitrary strings. Neat!
Neil

@ASCII-only Oh, and what's the verbose name of the predefined empty string variable?
Neil


@ASCII-only Then what am I doing wrong here: Try it online!
Neil

1

R, 70 bytes

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

Try it online!

Returns an anonymous function that constructs and returns the string.

45 bytes, non-conforming

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

An anonymous function that prints out the string in the desired format.

Try this online


1

Japt, 7 bytes

6 bytes of code, +1 for the -R flag.

VÆç"[]

Doesn't work in the latest version due to a bug with ç, but it does work in commit f619c52. Test it online!

Explanation

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 bytes

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

Explanation:

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

This takes its arguments in the order of #rows, #cols. Output starts with a newline.




1

C#, 78 bytes

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

Run in C# Pad

This is shorter than with for-loops and I'm not aware of any function in C# which can repeat with less code.



1

JavaScript (ES6), 43 36 bytes

From the comments, a trailing newline is now permitted.

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

Try it

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>



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.