动态创建盒子


22

挑战:

绘制一个矩形的ASCII框:[]

规则:

接受宽度和高度输入

您可以假设它们都是数字

必须产生一个包含换行符\ n的字符串

例子:

2:2

[][]
[][]

2:3

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

最小字节数获胜。


2
不错的第一篇文章!欢迎来到PPCG!
MD XF

1
我可以假设数字为正吗?可以有换行符吗?
dzaima

@dzaima正整数,没有尾随或前导的东西
Robinlemon

我们可以打印到控制台还是需要返回字符串?
朱塞佩

5
如果我们真的不能打印尾随换行符怎么办?它往往是很好的做法,允许一个尾随的换行符
可破坏柠檬

Answers:


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

Mathematica,26个字节

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

Mathematica Grid对象是否算作“带换行符的字符串”?
David Zhang

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个字节

由于使用了insert_name_here,因此巧妙地欺骗了-2个字节

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
您可以使用`Y(空列表的字符串表示形式)代替来保存2个字节"[]"
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的ascii字母)

说明

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

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

这给了我们一个x2y重复[]字符组成的字符串。




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

欧姆,9个字节

M"[]"َJ,    

在线尝试!

说明

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

2

PowerShell,25字节

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

-3感谢Mathias!


您可以将其缩短为25,例如:param($w,$h),("[]"*$w)*$h
Mathias R. Jessen

2

Japt13 12 + 1 = 14 13字节

+1为-R标志。

"[]"pN× òU*2

在线尝试

  • 感谢obarakon,节省了1个字节。


@ETHproductions:我一直在寻找的卡通片,但是太醉了,找不到!
毛茸茸的

哈哈,希望你们有一个愉快的夜晚。fyi,U*V可以缩短为
Oliver

1
@obarakon:那是N昨晚工作的两个机会。孩子们,千万不要喝酒和打高尔夫球!
毛茸茸的


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,对不起,我没有意识到Oblong可以处理任意字符串。整齐!
尼尔

仅限@ASCII哦,预定义的空字符串变量的详细名称是什么?
尼尔


@only ASCII然后我在这里做错了:在线尝试!
尼尔

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

杰普特,7个字节

6个字节的代码,-R标志+1 。

VÆç"[]

由于存在bug ç,因此无法在最新版本中使用,但在commit中可以使用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

C#,78个字节

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

在C#Pad中运行

这比使用for循环要短,而且我不知道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>



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.