Динамічно створюйте коробки


22

Змагання:

Намалюйте прямокутник полів ASCII: []

Правила:

Займає введення ширини та висоти

Ви можете припустити, що обидва ці числа

Потрібно створити рядок із символами нового рядка, \ n

Приклади:

2, 2:

[][]
[][]

2, 3:

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

Виграє найменше байт.


2
Гарний перший пост! Ласкаво просимо до PPCG!
MD XF

1
Чи можу я припустити, що цифри є позитивними? Чи можуть бути нові лінійки?
dzaima

@dzaima Позитивні цілі числа, без задніх чи головних речей
Robinlemon

чи можемо ми друкувати на консолі чи нам потрібно повернути рядок?
Джузеппе

5
що робити, якщо ми буквально не можемо надрукувати останні рядки? Це, як правило, є хорошою практикою, щоб дозволити одну нову лінію
руйнуючий лимон

Відповіді:


6

SOGL , 5 байт

Ƨ[]*∙

Простий:

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



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 Геніальний !! Я оновив відповідь. Дякуємо, що вказали на це!
Марія

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, але на початку є новий рядок: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

мозковий ебать, 145 байт

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

Спробуйте в Інтернеті!

Мій перший в історії код гольф! Так!

Вхід знаходиться в ascii + 48, тому для того, щоб зробити 50, 50, ви повинні ввести b, b (літери асції для 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

Я просто хотів відповідати критеріям входу, @calculatorFeline
vityavv

...Авжеж. : |
CalculatorFeline



2

Желе , 7 байт

ẋ⁾[]ẋ$Y

Дьядічне посилання, що повертає список символів (або повну програму, що друкує результат).

Спробуйте в Інтернеті!

Як?

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

PowerShell, 25 байт

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

-3 дякую Матіасу!


Ви можете скоротити його до 25 так:param($w,$h),("[]"*$w)*$h
Mathias R. Jessen

2

Japt , 13 12 + 1 = 14 13 байт

+1 для -Rпрапора.

"[]"pN× òU*2

Спробуйте в Інтернеті

  • 1 байт збережено завдяки обаракону.


@ETHproductions: той самий мультфільм, який я шукав, але був занадто п'яний, щоб знайти!
Кудлатий

Ха-ха, сподіваюся, хлопці весело провести вечір. fyi, U*Vможна скоротити до
Олівер

1
@obarakon: Це 2 можливості працювати з Nминулою ніччю. Ніколи не пийте та гольфу, діти!
Кудлатий


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>



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.