四月五日是国家深度DIsh比萨日,这个挑战的主题。给定一个正整数n
(n
大于0),创建一个ASCII深盘披萨。实际深盘比萨饼显示:
正如你所看到的,在比萨饼的底部和周围有一层皮。
披萨
地壳由两层组成。第一层是n
tall和n*3
long。长度是最高行中的字符数(包括空格)。因此,假定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:
/\___________/\
\ \ / /
\ \ / /
\ \ / /
\ \___/ /
\_____/
这是密码-高尔夫,所以以字节为单位的最短代码获胜!
发布于 2017-04-06 10:56:46
(懒散的尝试)
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();
基本思想是,我有功能处理打印所有东西,然后我只是蛮力它。用于循环的是内部层的顶部和底部之间的n
层。(空格)和_
的重复使用带有数组输入的arrayfun
完成。如果我以后有更多的时间,我会想出更多有趣的方法来做这件事。
发布于 2017-04-06 09:04:30
@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
的存在只是为了避免一些重复。
https://codegolf.stackexchange.com/questions/115408
复制相似问题