Me faça uma pizza


17

Como é sábado (UTC) e estou com fome, gostaria de uma fatia de pizza. Vou fazer um pedido e eu gostaria de uma boa pizza quente . Até o desafio?

O drive-thru

Farei meu pedido onde quer que esteja o drive-thru, seja STDIN, um parâmetro de função, um argumento de linha de comando, mas não vou colocá-lo em uma variável para você. (As expressões de função JS devem ser atribuídas a uma variável.)

A ordem

Meu pedido terá 2 partes. O primeiro será um número inteiro positivo diferente de zero de 3a 6. Este é o tamanho da minha pizza. Por exemplo, uma 6pizza de tamanho sem coberturas se pareceria com:

 /=====\
/       \
|       |
|       |
\       /
 \=====/

Um tamanho 5:

 /====\
/      \
|      |
\      /
 \====/

Um tamanho 4:

 /===\
|     |
|     |
 \===/

Um tamanho 3

 /==\
|    |
 \==/

As coberturas

Minhas coberturas serão uma sequência de letras MAIÚSCULAS. Aqui estão os valores possíveis:

P - Calabresa
S - Linguiça
N - piNeapple
J - Jalapenos
B - Pimentos de banana
C - baCon

Você deve colocá-los na pizza em algum lugar. Se eu pedir um tamanho 4 e PSPCJ, então esta é uma saída válida:

 /===\
|PSPCJ|
|     |
 \===/

Então é isso:

 /===\
|P P J|
| S C |
 \===/

E isto:

 /===\
|     |
|PSPCJ|
 \===/

Não sou muito exigente sobre onde estão minhas coberturas na pizza, desde que não estejam na crosta ou uma sobre a outra.

A janela de recolhimento

Irei a muitos lugares para buscar minha pizza, incluindo STDOUT, um arquivo, o valor de retorno de uma função, mas não uma variável.

Coisas extras

  • Lacunas padrão proibidas
  • Isso está marcado como para que a resposta mais curta em bytes seja vencida!
  • Não se preocupe com entradas inválidas (coberturas> espaço para pizza, etc.)
  • Veja minha resposta (JS ES6) abaixo para um exemplo (espero que você possa fazer melhor)

3
Umm, então você também pode pegar sua pizza no Drive-thru?
Matthew Roh

11
Você é exigente quanto a mim preenchendo os cantos superior direito e inferior direito da caixa de pizza com espaço em branco? ;)
DLosc,

11
@DLosc não, qualquer espaço em branco à direita no final de qualquer linha (incluindo uma nova linha à direita no final da saída) é opcional, mas não é obrigatório.
programmer5000

11
Pode a pizza tem mais de uma para uma das coberturas ̶ Então se você gosta de abacaxi:? ̶ ̶ ̶5̶,̶ ̶N̶N̶N̶̶ é também um válido entrada ̶ (ou deveria ser ̶ ̶5̶,̶ ̶N̶̶ Em vez) ̶ ̶ Além disso, onde estão os cogumelos ..? :( EDIT: o Nevermind sobre a primeira pergunta, eu vejo seus casos de teste tem 2x P.
Kevin Cruijssen

Posso postar um link de pedido ? xD
FantaC

Respostas:


1

Pip , 87 81 75 bytes

74 bytes de código, +1 para -lsinalizador.

e:'/.'=Xa-1.'\Y['/'\]Xa//5J'|X2-a%2^xPs.ePy.(b.sXa*a-a-2-#b<>a+1).RVys.RVe

Recebe entrada como argumentos da linha de comando. Experimente online!

Abordagem

eé a linha superior, como /=====\. Se você reverter, também é a linha inferior.

yé a borda esquerda, como ["/" "|" "|" "\"]. Se você inverter, também será a borda direita.

Em seguida, construímos o meio pegando bas coberturas, preenchendo-as com espaços de comprimento (a+1)*(a-2)(onde aestá o tamanho) e agrupando-as em uma lista de linhas.

Finalmente, imprimimos a linha superior com um espaço à esquerda; concatene o meio entre yà esquerda e RVyà direita e imprima isso; e imprima a linha inferior com um espaço à esquerda.


Isso funciona com uma pizza de queijo (sem coberturas)?
programmer5000

@ programmer5000 Sim - nesse caso, o segundo cmdline arg deve ser uma string vazia (se você estiver executando a partir de uma linha de comando real, precisará citá-la).
DLosc

5

Python 2 , 202,198,190,177,162,157, 146 bytes

n,t=input()
y=n+1
s=' '
l=' /'+'='*(n-1)+'\\ '+('','\n/'+s*y+'\\')[n>4]+'\n|'
print l+t[:y].center(y,s)+('','|\n|'+t[y:].center(y,s))[y%2]+l[::-1]

Experimente online!


Ei, você pode atribuir '\\', '|' e '/às variáveis de golfe fora de alguns bytes? É assim que eu raspei muito a minha resposta JS.
programmer5000

Eu só estou trabalhando nisso !!!!
Keerthana Prabhakaran 01/04/19

11
Além disso, você pode substituir o primeiro (n-1)por (--n), os n>4por n>3, (n+1)com (n+2)e o final (n-1)por npara reduzir 4 bytes?
Programmed5000

2
python não suporta --operador!
Keerthana Prabhakaran / 01/17 /


2

Python 3 , 224 213 195 bytes

n,t=eval(input())
k=n+1
y=print
i=0
f,s,e,b,p="/ =\\|"
t+=s*99
y(s+f+e*~-n+b)
if n>4:y(f+t[:k]+b);i+=k
y(p+t[i:i+k]+p);i+=k
if~-n%2:y(p+t[i:i+k]+p);i+=k
if n>4:y(b+t[i:i+k]+f);i+=k
y(s+b+e*~-n+f)

Experimente online!


1

JavaScript (ES6), 170 161 bytes

(n,t,a=[1,,n%2||2,,1])=>` /=\\
/___\\
|___|
\\___/
 \\=/`[r=`replace`](/.+/g,s=>s.repeat(a.pop()||n>4))[r](/=|_\b/g,`$&`.repeat(n-1))[r](/_/g,_=>t[i++]||` `,i=0)

Começa pegando uma pizza deformada, de largura 2 e altura 5, estica-a horizontalmente e ajusta-a verticalmente conforme apropriado; depois, substitui o interior por coberturas ou espaços depois que eles acabam.


0

JS (ES6), 257 255 249 248 246 244 bytes

m=s=>t=>(r="/",k="\\",p=" ",f="\n",x="|",c=f+x,q="",t=p+t,z=(s>2?p:q)+r+"=".repeat(s-1)+k+(s>4?f+r+p.repeat(++s)+k:q)+c+p.repeat(s)+x+(!s?c+p.repeat(s)+x:q)+p+(s>5?f+k+p.repeat(s)+r:q)+f+p+k+"=".repeat(s-2)+r,i=-1,z.replace(/ /g, x=>t[++i]||p))

Pode chamá-lo como m(4)("PS")1 calabresa e 1 linguiça. Provavelmente pode ser jogado mais.


11
Eita, dê tempo para outras pessoas responderem: P
Pavel

11
@ Григорий Перельман Eu só queria dar um exemplo, espero que isso não vença.
programmer5000

0

Carvão , 37 bytes

Nθ /==×=⸿/›θ⁴⸿|‖BO↓﹪θ²‖BO⊕﹪θ²J¹¦¹⪪S⊕θ

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

Nθ

Insira o tamanho da pizza.

 /==

Comece a imprimir a parte superior da pizza.

×=⸿/›θ⁴

Se a pizza é um dos tamanhos maiores, adicione mais na parte superior e lateral.

⸿|

Imprima mais do lado da pizza.

‖BO↓﹪θ²

Complete a metade esquerda da pizza refletindo com possível sobreposição.

‖BO⊕﹪θ²

Complete a pizza refletindo com sobreposição variável.

J¹¦¹⪪S⊕θ

Coloque as coberturas e divida-as em pedaços para que caibam dentro da pizza.

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.