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!

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'

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 Mbyte desnecessário e uma salva, invertendo os parâmetros para ×fazer a Pdesnecessá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.


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


Ó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
;

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


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!


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 ';'


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.


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


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

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.