比萨,比萨,深盘比萨!


11

4月5日是全国深层披萨节,这一挑战的主题。给定一个正整数nn大于0),创建一个ASCII深盘披萨。显示的实际深盘披萨:

一份披萨!

如您所见,比萨的底部和其他部分周围都有一层硬皮。

如何做比萨

地壳由两层组成。第一层将又n高又n*3长。长度是最高行中的字符数(包括空格)。因此给定n为1,第一层将如下所示:

\_/  1 character tall
 3 characters long

如果n是两个:

\    /   2 characters tall
 \__/
  6 characters long

现在为地壳的第二层。它将位于第一个内部结皮之外,因此它将是n+2字符高而(n*3)+6)字符长。给出的n是一个:

\       /  3 characters tall
 \     /
  \___/
   9 characters long (3 underscores, 3 slashes on either side)

如果n是两个:

\          / 4 characters high
 \        /
  \      /
   \____/
    12 characters long

然后,您将\/内部外壳和外部外壳的两个最高对彼此匹配。输入n为1:

\ \   / /
 \ \_/ /
  \___/

如果做得正确,它将看起来像V,没有顶部,每层之间有一个字符差异。说到顶部,地壳将由一对连接在一起/\,并由下划线隔开,(n*3)+2以完成地壳和比萨饼。

例子

如果n为1:

/\_____/\
\ \   / /
 \ \_/ /
  \___/

n 是2:

/\________/\
\ \      / /
 \ \    / /
  \ \__/ /
   \____/ 

n 是3:

/\___________/\
\ \         / /
 \ \       / /
  \ \     / /
   \ \___/ /
    \_____/

获胜标准

这是,因此以字节为单位的最短代码胜出!


1
内壳示例中有一些看起来。所述一个对于n = 1似乎很小,一个对于n = 2周的模样从最终n = 1个的实例中,内壳等...
亚当

我们可以用a -代替a _吗?
Okx

@Okx不,你可能不会
Anthony Pham

深盘披萨节快乐!
Arjun

Answers:


2

木炭,35字节

Nθ←_←×_θ↖θ↖²M→/P×_⁺²×²θ↘θ↘¹\×_θ‖BOθ

在线尝试!链接是详细版本的代码。说明:

Nθ

输入比萨的大小。

←_←×_θ

打印外壳外底的一部分。

↖θ↖²

打印外壳的左侧。

M→/P×_⁺²×²θ

打印顶部外壳的一部分。

↘θ↘¹\

打印内部外壳的左侧。

×_θ

打印内部外壳底部的一部分。

‖BOθ

反思完成比萨。

请注意,现代的木炭添加将大小缩减为31个字节:

Nθ←×_⊕θ↖θ↖²M→/P×_⊗⊕θ↘⊕θ\×_θ‖BOθ

在线尝试!链接是详细版本的代码。


不知道我是否意外引入了错误,但是填充似乎无法正常工作?
ASCII码,仅ASCII

@仅ASCII填充?这个测试用例至少对我来说看起来不错;您认为什么不起作用?
尼尔,

我认为输入4或以上不起作用?
仅ASCII的

@仅ASCII的呵呵,我怎么忽略了...
Neil

5

JavaScript(ES6),136个字节

f=
n=>"/\\"+(r=s=>s[0][0].repeat(n-1)+s)`_`+r`_`+r`___/\\
`+r` `.replace(/ /g,"$`\\ \\$`   $'$'$'/ /\n")+r` \\ \\`+r`_/ /
`+r`  \\`+r`___/`
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>

整个披萨非常重复,因此该r功能(设计为带标签的模板文字)会重复其输入n时间的第一个字符。它处理比萨饼的顶部和底部两行。通过替换一串空格来重复中间部分;的$`$'subsitutions自动对应于增加和减少坯料的数目从而定位\ \/ /适当。


2

Python 2中,153个 151字节

在线尝试

n=input()
a=' '*n
b='_'*n
print'/\\__'+b*3+'/\\'
i=0
exec"print' '*i+'\ \\\\'+' '*(3*n-2*i)+'/ /';i+=1;"*n
print a+'\ \\'+b+'/ /'
print a+' \\_'+b+'_/'

通过使用@KoishoreRoy将重复值替换为变量,从而将-2字节


1
而不是print' '*=~n+'\\'+'_'*-~n+'_/'你不能写print' '*i+' \\_'+'_'*n+'_/'?(或n代替i,但我正在复制上一行。)
Neil

@Neil我无法更改-~ni,因为此时i==n。但是第二个改变是好的。我也缩短了时间-~n,这要归功于您的想法
死负鼠

我不是简单地更改-~ni,因为我正在添加空格。(但是无论如何,您似乎都已经自行解决了。而且我已经指出了,n并且i在这一点上是相同的。)
Neil

2

MATLAB,333字节

(偷懒尝试)

function t(n);p=@(q)fprintf(q);s=@(x)p(' ');r=@()p('/ /');l=@()p('\\ \\');f=@()p('/');b=@()p('\\');u=@(x)p('_');h=@()p('/\\');e=@()p('\n');h();arrayfun(u,1:3*n+2);h();e();for i=1:n;arrayfun(s,1:i-1);l();arrayfun(s,1:3*n-2*(i-1));r();e();end;arrayfun(s,1:n);l();arrayfun(u,1:n);r();e();arrayfun(s,1:n+1);b();arrayfun(u,1:n+2);f();e();

格式:

function d(n)
p=@(q)fprintf(q);
s=@(x)p(' ');
r=@()p('/ /');
l=@()p('\\ \\');
f=@()p('/');
b=@()p('\\');
u=@(x)p('_');
h=@()p('/\\');
e=@()p('\n');
h();arrayfun(u,1:3*n+2);h();e();
for i=1:n
arrayfun(s,1:i-1); l(); arrayfun(s,1:3*n-2*(i-1)); r();e();
end
arrayfun(s,1:n); l(); arrayfun(u,1:n); r();e();
arrayfun(s,1:n+1); b(); arrayfun(u,1:n+2); f();e();

基本思想是,我具有打印所有内容的函数句柄,然后我就将其强行使用。一个for循环用于n内层最上层和最下层之间的层。(空格)和的重复_是使用arrayfun,通过数组输入完成的。如果我以后有更多时间,将尝试考虑更有趣的方法来执行此操作。


在线尝试!(在八度中)
路易斯·门多

2

木炭54 52字节

A⁺N²β↖M↓↙¹M→↘βM↑×_β↗βM←↖¹M↓↙βM↑←×_⁺β±²↖βM↘M→×_⁺×β³±⁴

说明:

A⁺N²β       Assign input + 2 to the variable β
↖             Move up and left one, printing a \
M↓           Move pointer down one
↙¹            Move down and left one, printing a /
M→           Move pointer right one
↘β            Move down and right β times
M↑           Move pointer up
×_β           Write underscores β times
↗β            Move up and right β times
M←           Move pointer right one
↖¹           Move up and left one
M↓           Move pointer down one
↙β           Move down and right β times
M↑           Move up one
←             Set direction to left
×_⁺β±²        Write underscores β - 2 times
↖β            Move up and left β times
M↘           Move down and right one
M→           Move right one
×_⁺×β³±⁴      Write underscores (β * 3) - 4 times

我以前的答案是Retina,这是我以前从未发布过的答案。现在,您在“木炭”中有了一个答案,我以前没有对此发表过答案。

在线尝试!


2

PHP,209200137135字节

终于击败了JS :)

echo($f=str_pad)("/\\",1+3*$x=$n=1+$argn,_),"/\\
";for(;$n;)echo$f("\\ \\",2*$n+$x," _"[!--$n]),"/ /
",$p.=" ";echo$f("\\",2+$x,_),"/";

接受来自STDIN的输入;随身-nR订购家庭比萨饼

分解

// print top
echo($f=str_pad)("/\\",1+3*$x=$n=1+$argn,_),"/\\\n";
// loop N+1 times
for(;$n;)
    // print current line and left padding for next line
    echo$f("\\ \\",2*$n+$x," _"[!--$n]),"/ /\n",$p.=" ";
// print bottom
echo$f("\\",2+$x,_),"/";

2

JavaScript(ES6),205个字节


这是我的第一个文章!

f=在开头添加a 并调用like f(arg)

n=>{a=[];w=" ";u="_";t=`/\\${u.repeat(n*3+2)}/\\
`;for(i=0;i<n+1;i++){c=i==n?u:w;a.push(`${w.repeat(i)}\\ \\${c.repeat((n+1-i*2)+n+(n-1))}/ /
`)};return [t,...a,`${w.repeat(i)}\\${u.repeat(n+2)}/`].join``}

注意: 所有换行符都是必需的!


f=n=>{a=[];w=" ";u="_";t=`/\\${u.repeat(n*3+2)}/\\
`;for(i=0;i<n+1;i++){c=i==n?u:w;a.push(`${w.repeat(i)}\\ \\${c.repeat((n+1-i*2)+n+(n-1))}/ /
`)};return [t,...a,`${w.repeat(i)}\\${u.repeat(n+2)}/`].join``}

document.querySelector("#elem").innerHTML = f(+prompt("Enter a Number"));
<pre id="elem">


说明

该代码首先声明一个Array a。然后w,它声明并分别u具有空白和下划线的值。然后,它声明一个String变量来保存外壳的值(可以通过/\+(n*3+2 underscores)+/\挑战中提到的进行计算)。在此之后,用for回路和Template Literal,比萨饼的中间被创建(与具有每一层i在起点和空格(n+1-i*2)+n+(n-1)的空格之间\ \/ /,其中i表示的索引for循环)。最后,创建了披萨的最底部((i whitespaces)+\+(n+2 underscores)+/)。所有零件都连接在一起并输出。


如果由于某些原因该代码段无法正确显示ASCII文字,请在此处查看

祝大家深层披萨节快乐!



1

批量200字节

@set l=@for /l %%i in (1,1,%1)do @call 
@set t=
@set s=
%l%set s=___%%s%%
@echo /\_%s%_/\
%l%echo %%t%%\ \%%s:_= %%/ /&call set t= %%t%%&call set s=%%s:~2%%
@echo %t%\ \%s%/ /
@echo %t% \_%s%_/

t包含左缩进,而s包含内部;它的_s替换为中间行的空格。l只是为了避免重复而存在。


0

V,57字节

i\ \´ / /ÙãxX2r_>>Ù>>lxxE2r_À­ñHãyêP>GÄXã2é ñHÄÒ_R/\$h.

在线尝试!

因为,(像往常一样)它包含许多讨厌的非ASCII字符和不可打印内容,所以这里是一个十六进制转储:

00000000: 695c 205c b420 2f20 2f1b d9e3 7858 3272  i\ \. / /...xX2r
00000010: 5f3e 3ed9 3e3e 6c78 7845 3272 5fc0 adf1  _>>.>>lxxE2r_...
00000020: 48e3 79ea 503e 47c4 58e3 32e9 20f1 48c4  H.y.P>G.X.2. .H.
00000030: d25f 522f 5c1b 2468 2e                   ._R/\.$h.

我将在不久后发布更详细的解释,但这里是高级概述:

i\ \´ / /ÙãxX2r_>>Ù>>lxxE2r_
"Create 
"\ \    / /
" \ \__/ /
"  \____/
"This can probably be compressed a lot more

À­ñHãyêP>GÄXã2é ñ
"*arg1 times*, expand the pizza slice

HÄÒ_R/\$h.
"Add the crust

0

C(铛)211个 215字节

i,l;f(n){l=n*3+6;char u[l];for(i=0;i<l;)u[i++]='_';u[l-1]=i=0;printf("/\\%.*s/\\\n",l-4,u);for(;i<n;i++)printf("%*s\\ \\%*.s/ /\n",i,"",n*3-(2*i),"");printf("%*.s\\ \\%.*s/ /\n%*.s\\%.*s/\n",i,"",n,u,i+1,"",n+2,u);}

在线尝试!

漂亮代码:

i,l;
f(n) {
    l = n*3+6;
    char u[l];

    // Initialize u[] with a full line of underscores,
    for (i=0;i<l;)
        u[i++] = '_';

    // Make sure the string ends in a valid way
    u[l] = i = 0;

    /* Print the crust 'top'
     * l-4 dashes are needed because '/\/\'
     * %.*s notation to pad (l-4) bytes of the underscore string
     */
    printf("/\\%.*s/\\\n", l-4,u);

    /* Print n rows of just 'walls' \ \  / /
     * each row has i=0++ leading spaces,
     * and each row has n*3-(2i) center spaces
     */
    for(; i<n; i++)
        printf("%*s\\ \\%*.s/ /\n", i,"", n*3-(2*i), "");

    /* Print i spaces, '\ \', n underlines, '/ /'
     * then i+1 spaces, '\', n+2 underlines, and '/'
     */
    printf("%*.s\\ \\%.*s/ /\n%*.s\\%.*s/\n",i,"",n,u,i+1,"",n+2,u);
}

编辑:

  • 通过从%切换来去除s [l]并关联。表示为% .s
  • 添加了功能包装,以实现合规性并在线尝试


0

CJam,74字节

太长。我将尝试另一种方法。

"/\\"ri:M3*:A2+'_*1$NL{"\ \\"AS*"/ /"3$S+A((:A;N\}M*4$A'_*4$N4$S'\A2+'_*'/

逐行构建字符串。没什么太疯狂的。


0

CJam,89个字节

好吧,这实际上比我目前的其他解决方案要长,但我认为它更适合高尔夫运动:

ri{:T)_S*a*ee_{~'\t}%TS*aTU+*'_f+@{~'/t}%W%++z}:K~2S*f{\+}T1:U+K..e>"/\\"'_T3*(*1$++a\+N*

堆栈跟踪:

"2" ; r
2 ; i
2 {:T)_S*a*ee_{~'\t}%TS*aTU+*'_f+@{~'/t}%W%++z} ; {}
2 {:T)_S*a*ee_{~'\t}%TS*aTU+*'_f+@{~'/t}%W%++z} ; :K
2 ; ~
2 ; :T
3 ; )
3 3 ; _
3 3 " " ; S
3 "   " ; *
3 ["   "] ; a
["   " "   " "   "] *
[[0 "   "] [1 "   "] [2 "   "]] ; ee
[[0 "   "] [1 "   "] [2 "   "]] [[0 "   "] [1 "   "] [2 "   "]] ; _
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ; {~'\t}%
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] 2 ; T
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] 2 " " ; S
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] "  " ; *
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] ; a
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] 2 ; T
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] 2 0 ; U
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] 2 ; +
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  " "  "] ; *
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  " "  "] '_ ; '_
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  _" "  _"] ; f+
["\  " " \ " "  \\"] ["  _" "  _"] [[0 "   "] [1 "   "] [2 "   "]] ; @
["\  " " \ " "  \\"] ["  _" "  _"] ["/  " " / " "  /"] ; {~'/t}%
["\  " " \ " "  \\"] ["  _" "  _"] ["  /" " / " "/  "] ; W%
["\  " " \ " "  \\" "  _" "  _" "  /" " / " "/  "] ; ++
["\      /" " \    / " "  \__/  "] ; z
["\      /" " \    / " "  \__/  "] "  " ; 2S*
["  \      /" "   \    / " "    \__/  "] ; f{\+}
["  \      /" "   \    / " "    \__/  "] 2 ; T
["  \      /" "   \    / " "    \__/  "] 2 1 ; 1
["  \      /" "   \    / " "    \__/  "] 2 1 ; :U
["  \      /" "   \    / " "    \__/  "] 3 ; +
["  \      /" "   \    / " "    \__/  "] ["\          /" " \        / " "  \      /  " "   \____/   "] ; K
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] ; ..e>
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" ; "/\\"
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ ; '_
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ 3 ; T
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ 9 ; 3*
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ 8 ; (
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" "________" ; *
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" "________" "/\\" ; 1$
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\________/\\" ; ++
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] ["/\________/\\"] ; a
["/\________/\\" "\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] ; \+
"/\________/\
\ \      / /
 \ \    / / 
  \ \__/ /  
   \____/   " ; N*
; [implicit output]
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.