Suave como Teflon

10

Literalmente! 6 de abril é o Dia Nacional do Teflon , que é comemorado com panelas revestidas com Teflon (o que faremos). Portanto, dado um número inteiro positivo n, crie uma panela de Teflon. A seção "pan" da panela é um octógono, com cada um dos lados consistindo de ncaracteres, que variam de acordo com o lado em que está, exceto pelos lados usando o caractere {ou }. Esses lados terão sempre um comprimento de caractere. Se nfor 1:

  _
 / \
{   }
 \_/

Como você pode ver, cada lado consiste em um caractere (ou {, }, /, \, ou _). Se nfor 2:

   __
  /  \
 /    \
{      }
 \    /
  \__/

O identificador será criado com n+3 ='s e finalizado com zero ( 0).


Se né um:

  _
 / \
{   }====0
 \_/

n é 2:

   __
  /  \
 /    \
{      }=====0
 \    /
  \__/  

n é 3:

    ___
   /   \
  /     \
 /       \
{         }======0
 \       /
  \     /
   \___/  

Se nfor 4:

     ____
    /    \
   /      \
  /        \
 /          \
{            }=======0
 \          /
  \        /
   \      /
    \____/  

Regras e Critérios

  • Não são permitidas brechas

  • A alça sai do lado direito (o lado feito do }personagem)

  • A entrada é um número inteiro positivo

  • Se o lado não consistir em um {ou }(não no lado esquerdo ou direito), eles serão constituídos pelos nrespectivos caracteres:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Como esse é o , o código mais curto vence!
Anthony Pham
fonte
Você poderia adicionar mais casos de teste?
Xnor
@xnor Adicionada mais duas
Anthony Pham
Os casos de teste para n = 3 e n = 4 não tem o número correcto de caracteres na topo ou margens inferiores
fənɛtɪk
@ fəˈnɛtɪk Obrigado! Isso foi corrigido #
Anthony Pham
Posso pegar no Olugar do 0botão?
Titus

Respostas:

9

Carvão ,  41 38 36 30 28 bytes

Agradecemos a @Emigna por ajudar a salvar dois bytes, obrigado a @ ASCII-only por salvar seis bytes e obrigado a @Neil por salvar outros dois bytes!

Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0

Experimente online!

Explicação:

Nη                 // Take the size of the pan as input.
↙η                 // Draw a line of η '\'s going down to the left.
↑←×_η              // Move one step up and print η underscores to the left.
↖η↗{↗η             // Print a line of η '\'s going up to the left.
                   // Then move one step north-east and print '{'.
                   // Then print a line of η '/'s going up to the right.
×_η↓               // Print '_' η times and move one step down.
↘η}                // Draw a line of η '\'s going down to the right, then print '}'.
×=⁺³η              // Print '=' η+3 times.
0                  // Print '0'
Steadybox
fonte
11
Você pode se mover para a esquerda do ponto de partida no carvão, não é? Nesse caso, iniciar na ponta do identificador deve economizar alguns bytes por não ter que voltar atrás no espaço já impresso.
Emigna
@ Emigna Obrigado, eu não sabia disso. Eu nunca tinha usado carvão antes.
Steadybox
11
@Steadybox 30 bytes:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
somente ASCII
11
28 bytes: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 byte salvo imprimindo a metade inferior da panela primeira fazendo com que o byte desnecessário e uma salva, invertendo os parâmetros para ×fazer a desnecessária.)
Neil
7

JavaScript (ES6), 171 bytes

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

Toda a assadeira de pizza é muito repetitiva; portanto, a função r (projetada como um literal de modelo marcado) repete o primeiro caractere de sua entrada n vezes. Isso lida com o topo, o meio e as linhas da panela. O restante é 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. Finalmente, os _s são preenchidos na última linha, pois é sutilmente diferente da segunda linha nesse aspecto.

Neil
fonte
7

JavaScript + HTML, 575 bytes (apenas JS de 451 bytes) 376 bytes (somente JS de 482 bytes)

y=document,y.y=y.getElementById,a=(b,c)=>{w="";for(z=0;z<b;z++)w+=c;return w},d=_=>{n=Number(y.y("n").value);s="";u=" ";j="<br>",m="\\",o="/";for(i=-2;i<=2*n;i++)-2==i?s+=a(n+1,u)+a(n,"_")+j:i<n-1?s+=a(n-i-1,u)+o+a(2*(i+1)+n,u)+m+j:i==n-1?s+="{"+a(3*n,u)+"}"+a(n+3,"=")+"0"+j:i+1==2*n?s+=a(n,u)+m+a(n,"_")+o:i+1<2*n&&(s+=a(i-n+1,u)+m+a(5*n-2*i-2,u)+o+j);y.y("p").innerHTML=s};
<input type="number" id='n'><button onclick='d()'>Do</button><p id='p' style='font-family:monospace;'></p>

Não é uma abordagem complicada: várias concatenações de cordas usando condições para as cinco partes diferentes da panela: as linhas superior, inferior e média e as metades superior e inferior.

Reduzi o máximo que pude, mas era o limite com esse método.

EDIT: não era - adicionalmente jogado por @ programmer5000

Zoltán Schmidt
fonte
Ótima primeira resposta! Bem-vindo à Programação de Puzzles e Code Golf!
Anthony Pham
Foi ótimo? Quero dizer, demorou muito mais tempo para fazer do que deveria ter sido e nem é realmente muito curto - mas, de qualquer forma, obrigado!
Zoltán Schmidt
Você deve visitar a pergunta sobre golfe dicas para Javascript
Anthony Pham
Não sabia que existem dicas também - obrigado!
Zoltán Schmidt
2
Bem-vindo ao PPCG. Para mim, qualquer resposta que mostre algum esforço e uma tentativa séria de enfrentar o desafio é uma boa resposta e merece um voto positivo. Boa sorte com as dicas e sugestões. Minha primeira dica seria: pare de pensar como o tipo de programador com o qual você gostaria de trabalhar em um projeto e comece a fazer todas as coisas que você odeia quando assume o código de outra pessoa (variáveis ​​de uma letra, atalho se declarações, etc. .) :)
ElPedro
4

PHP, 174 bytes

echo($p=str_pad)("",-$i=-1-$n=$argn),$p(_,$n,_);for(;$i++<$n;)echo$p("
",1+$a=abs($i)),$i?$p("\/"[$i<0],1+$n*3-$a*2,"_ "[$i<$n])."\/"[$i>0]:$p("{",$n*3).$p("} ",5+$n,"="). 0;

Recebe entrada do STDIN; executar -nRou testá-lo online .

demolir

// first line
echo($p=str_pad)("",-$i=-1-$n=$argn),$p(_,$n,_);
// loop $i from -$n to $n
for(;$i++<$n;)echo
    $p("\n",1+$a=abs($i)),                  // 1. left padding
$i?                     // if not middle line:
    $p("\/"[$i<0],1+$n*3-$a*2,"_ "[$i<$n])  // 2. left edge and inner padding
    ."\/"[$i>0]                             // 3. right edge
:                       // else:
    $p("{",$n*3)                            // 2. left edge and inner padding
    .$p(" }",5+$n,"=")                      // 3. right edge
    . 0                                     // 4. knob
;
Titus
fonte
4

Python 3, 196 bytes

n=int(input())
p=print
s=' '
def m(i,f,b,c=s):p(s*(n-i)+f+c*(n+2*i)+b)
p(s*n+s+'_'*n)
for i in range(n):m(i,*'/\\')
p('{'+s*n*3+'}'+'='*(n+3)+'0')
for i in range(n-1,0,-1):m(i,*'\\/')
m(0,*'\\/_')

Usei algumas variáveis ​​para encurtar o código, mas é mais direto. Aqui está uma versão mais longa e mais legível:

n = int(input())

def middle_part(i, first_slash, second_slash, middle_char=' '):
    print(' ' * (n-i) + first_slash + middle_char * (n + 2*i) + second_slash)

print(' ' * (n+1) + '_' * n)

for i in range(n):
    middle_part(i, '/', '\\')

print('{' + ' ' * n*3 + '}' + '=' * (n+3) + '0')

for i in range(n-1, 0, -1):
    middle_part(i, '\\', '/')

middle_part(0, '\\', '/', middle_char='_')

Edit: alterado para ler n de stdin, 181 → 196 bytes

ArkaneMoose
fonte
3

Python 2 , 180 178 bytes

s,i=' ',input();R=range(i)
print'\n'.join([s+s*i+'_'*i]+[s*(i-a)+'/'+s*(i+a*2)+'\\'for a in R]+['{'+s*i*3+'}'+'='*(i+3)+'0']+[s*(i-c)+'\\'+'_ '[c>0]*(i+c*2)+'/'for c in R[::-1]])

Experimente online!

ElPedro
fonte
3

Python 2.7, 194 195 191 187 185 bytes

n=input();s=' ';a='\\';z='/'
def m(f,b,i,c=s):print(n-i)*s+f+c*(n+2*i)+b
m(s,s,0,'_')
for i in range(n):m(z,a,i)
print'{'+s*n*3+'}'+'='*(n+3)+'0';exec"m(a,z,i);i-=1;"*(n-1);m(a,z,0,'_')

Experimente online!

Abra para editar sugestões para reduzi-lo. :)

Editar 1: +1 byte - Créditos ao ElPedro por apontar um erro no código, o que aumentou em 1 byte.

Editar 2: -4 bytes - Créditos ao piyush-ravi por remover argumentos desnecessários.

Editar 3: -4 bytes - Como eu não vi isso? : P

Editar 4: -2 bytes - Substituindo '\ n' por ';'

Koishore Roy
fonte
Parece que a primeira linha abaixo da linha do meio não deve estar lá quando eu tento localmente. tentei para entrada 4 e 3 e parece errado. No entanto, você não retirará o voto positivo até ter tempo para revisar, explicar ou corrigir. A minha culpa por não olhando duro o suficiente :)
ElPedro
Obrigado por apontar o ElPedro . Fixa-lo :)
Koishore Roy
2

PowerShell , 165 bytes

param($n)($a=' '*$n)+" "+($b='_'*$n);$n..1|%{' '*$_+"/"+' '*($n+2*$i++)+"\"};"{$($a*3)}$('='*($n+3))0";if($n-1){1..($n-1)|%{' '*$_+"\"+' '*($n+2*--$i)+"/"}};"$a\$b/"

Experimente online!

Recebe entrada $n, define $aum monte de espaços, $bum monte de sublinhados e a seqüência concatena isso com um espaço. Isso fica na calha.

Loops de $nbaixo para 1. Se $n=1, isso será executado apenas uma vez. A cada iteração, fazemos uma concatenação de cadeia de espaços, a /, mais espaços com contador $ie a \. Esses são todos deixados no pipeline.

Em seguida, vem a parte do meio com a alça, que coincidentemente tem $a*3espaços no meio e $n+3 =sinais, depois a 0. Isso fica na calha.

Se $nfor maior que 1, então $n-1é verdade; assim, entramos na condicional, onde damos a outra direção para formar o fundo da panela. Se $n=1, então não precisamos dessa parte devido ao modo como as linhas funcionam. Esses são todos deixados no pipeline. Terminamos com os espaços e sublinhados com o $a\$b/fundo da panela.

Todas essas seqüências de caracteres do pipeline são enviadas via implícito Write-Outputque as imprime com novas linhas entre os elementos.

AdmBorkBork
fonte
2

JavaScript + HTML - 346 bytes

JavaScript - 314 bytes, HTML - 32 bytes

function o(a){a=parseInt(a),String.prototype.r=String.prototype.repeat;c=console.log,d=" ".r(a),e="_".r(a);c(" "+d+e);for(f=a-1,g=a;f>=0;f--,g+=2)c(" ".r(f+1)+"/"+" ".r(g)+"\\");c("{ }=0".replace(" "," ".r(3*a)).replace("=","=".r(a)));for(f=0,g=3*a;f<a-1;f++,g-=2)c(" ".r(f+1)+"\\"+" ".r(g-2)+"/");c(d+"\\"+e+"/")}
<input id=n onkeyup=o(n.value)>

Sem golfe

function o(sides) {

  String.prototype.r = String.prototype.repeat;
  var middle = '{ }=0',
  log = console.log,
  ss = ' '.r(sides),
  u = '_'.r(sides),
  sides = parseInt(sides);

  // top
  log(' ' + ss + u);

  // top mid
  for (var i = sides - 1, j = sides; i >= 0; i--, j += 2) {
    log(' '.r(i + 1) + '/' + ' '.r(j) + '\\');
  }

  // mid
  log('{ }=0'.replace(' ', ' '.r(sides * 3)).replace('=', '='.r(sides)));

  // bottom mid
  for (var i = 0, j = sides * 3; i < sides - 1; i++, j -= 2) {
    log(' '.r(i + 1) + '\\' + ' '.r(j - 2) + '/');
  }

  // bottom
  log(ss + '\\' + u + '/');

}
<input id="n" onkeyup="o(n.value)">

cnorthfield
fonte
0

C, 249 bytes

o(c,a){for(;a--;)putchar(c);}s;p(n){o(32,n+1);o(95,n);o(10,1);for(s=0;s<n;s++)o(32,n-s),o(47,1),o(32,n+s*2),o(92,1),o(10,1);o(123,1);o(32,n*3);o(125,1);o(61,3+n);o(48,1);o(10,1);for(s=n-1;s>-1;s--)o(32,n-s),o(92,1),o(s?32:95,n+s*2),o(47,1),o(10,1);}

Experimente online

Johan du Toit
fonte