Динамически создавать ящики

22

Соревнование:

Нарисуйте прямоугольник ASCII-блоков: []

Правила:

Принимает ширину и высоту ввода

Вы можете предположить, что оба эти числа

Необходимо создать строку с символами новой строки, \ n

Примеры:

2, 2:

[][]
[][]

2, 3:

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

Побеждает несколько байтов.

Robinlemon
источник
2
Хороший первый пост! Добро пожаловать в PPCG!
MD XF
1
Могу ли я предположить, что цифры положительные? Могут ли быть последние строки?
Дзайма
@dzaima Положительные целые числа, без трейлинга и лидирующих
Robinlemon
мы можем вывести на консоль или нам нужно вернуть строку?
Джузеппе
5
Что делать, если мы буквально не можем не печатать завершающие строки? Хорошей практикой является использование одного завершающего символа новой строки
Destructible Lemon

Ответы:

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
dzaima
источник
4

Mathematica, 26 байтов

Grid@Table["[]",{#2},{#}]&
J42161217
источник
Считается ли Gridобъект Mathematica «строкой с символами новой строки»?
Дэвид Чжан,
4

MATL , 7 байт

v&DiiX"

Попробуйте онлайн!

объяснение

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 байт

Умный трюк -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
Придумали этот точный код самостоятельно. Красиво сделано.
Исаак
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);}

Моя первая попытка игры в гольф, я что-то упустил?

dbandstra
источник
Это для 45, но в начале есть f(w,h){h*=w;while(h--)printf("\n[]"+!(h%w));}
Conor O'Brien
Это работает только при ширине 2.
Дбандстра
Так оно и есть, моя ошибка
Конор О'Брайен
Отличный первый гольф! Добро пожаловать на сайт!
MD XF
1
Разве использование forцикла не сократит код еще больше?
Spikatrix
3

; # + , 197 байт

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

Попробуйте онлайн! Требуется нулевой байт после каждого входного номера.

Я вроде не знаю, как это работает. То, что я могу вам сказать, это то, что эта часть кода:

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

Разбор входных чисел.

Конор О'Брайен
источник
3

брейкфук, 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
<-]
vityavv
источник
Впечатляет. Добро пожаловать на сайт! :)
DJMcMayhem
Почему вход ASCII + 48? Вы можете сэкономить много байтов, просто используя вход ASCII + 0 (возможно, для удобства использования
CalculatorFeline
Я просто хотел соответствовать критериям ввода, @calculatorFeline
vityavv
...О верно. : |
CalculatorFeline
2

J , 12 байт

'[]'$~],+:@[

Попробуйте онлайн!

объяснение

'[]'$~],+:@[   input: y, x
        +:@[   double y
      ],       pair with x
               this gives (x, 2y)
    $~         shape the left argument into the right argument's shape
'[]'           2-length character string

Это дает нам xпо 2yчереде повторяющихся []символов.

Конор О'Брайен
источник
11 байт
Утренняя монахиня
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 спасибо Матиасу!

colsw
источник
Вы можете сократить его до 25 следующим образом:param($w,$h),("[]"*$w)*$h
Матиас Р. Ессен
2

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

+1 за -Rфлаг.

"[]"pN× òU*2

Попробуйте онлайн

  • 1 байт спасен благодаря obarakon.
мохнатый
источник
Немного пьяный может иногда помочь вашим навыкам программирования : P
ETHproductions
@ETHproductions: тот самый мультфильм, который я искал, но был слишком пьян, чтобы найти!
Лохматый
Хаха, надеюсь, что вы, ребята, веселитесь ночью. к вашему сведению, U*Vможно сократить до
Оливер
1
@obarakon: это две возможности работать с Nпрошлой ночью. Никогда не пейте и играйте в гольф, дети!
Лохматый
2

APL (Дьялог) , 11 байт

'[]'⍴⍨⊢,2×⊣

Попробуйте онлайн!

'[]' Струна

⍴⍨ циклически повторяется, чтобы заполнить форму

 правильный аргумент (строки)

, а также

 дважды

левый аргумент (столбцы)

Адам
источник
2

Древесный уголь , 8 7 байт

EN×[]Iη

Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод в порядке высота, ширина. Примитивы рисования древесного угля не подходят для этого, так что это просто выбирает легкий путь и повторяет []строку соответствующим образом. Объяснение:

 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 Извините, я не осознавал, что Облонг работает с произвольными строками. Ухоженная!
Нил
@ ASCII-only О, а каково подробное имя предопределенной пустой строковой переменной?
Нил
Это w, имя , греческий, чтобы многословно
Только для ASCII
@ ASCII-only Тогда, что я тут делаю не так: попробуйте онлайн!
Нил
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

Japt , 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
ETHproductions
источник
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. Вывод начинается с новой строки.

steenbergh
источник
1

удар , 55 байт

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

Попробуйте онлайн! Использует TIO вкус Bash, так как я запускаю Windows.

Конор О'Брайен
источник
1
Я не думаю, что это работает для многозначных чисел
Kritixi Lithos
@KritixiLithos Это должно сработать сейчас
Конор О'Брайен
1

C #, 78 байт

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

Запустить в C # Pad

Это короче, чем с for-loop, и я не знаю ни одной функции в 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>

мохнатый
источник