Pizza, Pizza, Pizza de prato fundo!


11

O dia 5 de abril é o Dia Nacional da Pizza Profunda, o tema deste desafio. Dado um número inteiro positivo n( né maior que 0), crie uma pizza de prato fundo ASCII. Pizza de prato fundo real mostrada:

Uma pizza!

Como você pode ver, há uma camada de crosta no fundo e ao redor do restante da pizza.

Como fazer a pizza

A crosta é feita de duas camadas. A primeira camada será nalta e n*3longa. Comprimento é o número de caracteres (incluindo espaços) na linha mais alta. Assim, dado n1, a primeira camada ficaria assim:

\_/  1 character tall
 3 characters long

Se né dois:

\    /   2 characters tall
 \__/
  6 characters long

Agora, para a segunda camada da crosta. Ela vai fora a primeira crosta, interior que, portanto, será n+2personagens altos e (n*3)+6)caracteres. Dado né um:

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

Se né dois:

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

Você combinaria os dois pares mais altos \/entre si para a crosta interna e externa. Em né 1:

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

Se feito corretamente, pareceria um V sem os topos com uma diferença de um caractere entre cada camada. Por falar em topos, a crosta será unida por um par de /\, separados por uma linha de sublinhados de (n*3)+2comprimento para completar a crosta e a pizza.

Exemplos

Se nfor 1:

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

n é 2:

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

n é 3:

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

Critério vencedor

Isso é , então o código mais curto em bytes vence!


1
Algo parece nos exemplos internos da crosta. A uma para n = 1 parece pequena, a um para n = 2 se parece com a crosta interna da final n = 1 exemplo, etc ...
Adám

Podemos usar um em -vez de um _?
Okx

@Okx Não, você não pode
Anthony Pham

Feliz dia da pizza prato profundo!
Arjun #

Respostas:


2

Carvão vegetal , 35 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

Nθ

Insira o tamanho da pizza.

←_←×_θ

Imprima parte da base externa da crosta.

↖θ↖²

Imprima a crosta externa do lado esquerdo.

M→/P×_⁺²×²θ

Imprima parte da crosta superior.

↘θ↘¹\

Imprima a crosta interna do lado esquerdo.

×_θ

Imprima parte da base interna da crosta.

‖BOθ

Reflita para completar a pizza.

Observe que as adições modernas ao carvão reduzem o tamanho para 31 bytes:

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

Experimente online! Link é a versão detalhada do código.


Não tem certeza se introduzi um bug acidentalmente, mas o preenchimento parece não funcionar corretamente?
somente ASCII

@ Preenchimento somente ASCII? O caso de teste pelo menos parece certo para mim; o que você acha que não está funcionando?
Neil

Eu acho que não funciona com entradas de 4 e acima?
somente ASCII

@ ASCII-only Huh, como eu esquecer que ...
Neil

5

JavaScript (ES6), 136 bytes

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>

A pizza inteira é muito repetitiva; portanto, a rfunção (projetada como um literal de modelo marcado) repete o primeiro caractere de seus ntempos de entrada . Isso lida com as duas linhas superior e inferior da pizza. O meio é repetido substituindo uma sequência de espaços em branco; os $`e $'subsitutions corresponder automaticamente para aumentar e diminuir o número de espaços em branco posicionando, assim, a \ \e / /apropriadamente.


2

Python 2, 153 151 bytes

Experimente online

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+'_/'

-2 bytes substituindo valores repetidos por variáveis ​​graças a @KoishoreRoy


1
Em vez de print' '*=~n+'\\'+'_'*-~n+'_/'você não pode escrever print' '*i+' \\_'+'_'*n+'_/'? (Ou n, em vez de i, mas eu estava copiando a linha anterior.)
Neil

@ Neil eu não posso mudar -~npara i, porque neste momento i==n. Mas a segunda mudança é boa. Também eu shortended -~n, graças a sua ideia
Morto Possum

Eu não estava simplesmente mudando -~npara i, porque estava adicionando espaço. (Mas você parece ter funcionado que em seu próprio país de qualquer maneira Eu também já observou que. nE isão os mesmos neste ponto.)
Neil

2

MATLAB, 333 bytes

(Tentativa preguiçosa)

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();

Formatado:

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();

A idéia básica é que eu tenho alças de função para imprimir tudo, e então eu a forço bastante. O loop for é para as ncamadas entre a parte superior e a inferior da camada interna. A repetição de (espaços) e _é feita usando arrayfun, com entradas de matriz. Tentarei pensar em maneiras mais interessantes de fazer isso se eu tiver mais tempo mais tarde.



2

Carvão , 54 52 bytes

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

Explicação:

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

Minha resposta anterior foi em Retina, um idioma para o qual eu não havia postado antes. Agora, você tem uma resposta em Charcoal, para a qual eu não publiquei uma resposta antes.

Experimente online!


2

PHP, 209200137133 bytes

finalmente batendo JS :)

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

Recebe entrada do STDIN; executar -nRou pedir uma pizza em família .

demolir

// 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 bytes


Este é o meu primeiro post de !

Adicione um f=no início e chame 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``}

Nota: Todas as quebras de linha são necessárias!


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">


Explicação

O código primeiro declara uma matriz a. Em seguida, ele declara we upossui o valor de espaço em branco e sublinhado, respectivamente. Em seguida, ele declara uma variável String para armazenar o valor da crosta (que pode ser calculada /\+(n*3+2 underscores)+/\como mencionado no Desafio). Depois disso, com um forloop e a Template Literal, o meio da pizza é criado (com cada camada tendo iespaços em branco no início e (n+1-i*2)+n+(n-1)espaços em branco entre \ \e / /, onde irepresenta o índice do forloop). Por fim, a maior parte inferior da pizza é criada ( (i whitespaces)+\+(n+2 underscores)+/). Todas as peças são unidas e produzidas (ted).


Se, por algum motivo, o snippet não exibir a arte ASCII corretamente, dê uma olhada aqui .

Feliz Deep Dish Pizza Day para todos!



1

Lote, 200 bytes

@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%_/

tcontém o recuo esquerdo enquanto scontém o interior; seus _s são substituídos por espaços nas linhas do meio. lexiste apenas para evitar alguma repetição.


0

V , 57 bytes

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

Experimente online!

Como (como sempre) isso contém muitos caracteres não ASCII e não imprimíveis, aqui está um hexdump:

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.

Postarei uma explicação mais detalhada em breve, mas aqui está uma visão geral de alto nível:

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 (clang) , 211 215 bytes

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);}

Experimente online!

Pretty Code:

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);
}

Editar% s:

  • removido s [l] e associado alternando de%. notação s para% .s
  • invólucro de função adicionado para conformidade e teste on-line


0

CJam, 74 bytes

Tempo demais. Vou tentar outra abordagem.

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

Constrói a string linha por linha. Nada muito louco.


0

CJam, 89 bytes

Bem, isso é realmente mais longo do que minha outra solução no momento, mas acho que é mais fácil de jogar:

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

Rastreio de pilha:

"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]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.