Suave como el teflón

10

¡Literalmente! El 6 de abril es el Día Nacional del Teflón , que se celebra con sartenes recubiertos de Teflón (lo que haremos). Entonces, dado un número entero positivo n, crea una bandeja de teflón. La sección "panorámica" de la panorámica es un octágono con cada uno de sus lados que consiste en ncaracteres, que variarán dependiendo de qué lado sea, excepto los lados que usan el carácter {o }. Esos lados tendrán una longitud de carácter de uno siempre. Si nes 1:

  _
 / \
{   }
 \_/

Como se puede ver, cada lado se compone de un carácter (o bien {, }, /, \, o _). Si nes 2:

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

El identificador se creará con n+3 ='s y finalizará con un cero ( 0).


Si nes uno:

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

n es 2:

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

n es 3:

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

Si nes 4:

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

Reglas y Criterio

  • No se permiten lagunas

  • La manija sale del lado derecho (el lado hecho del }personaje)

  • La entrada es un entero positivo

  • Si el lado no consta de ninguno {o }(no del lado izquierdo o derecho), consistirán en los ncaracteres respectivos:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Como se trata de , ¡el código más corto gana!
Anthony Pham
fuente
¿Podría agregar más casos de prueba?
xnor
@xnor agregó dos más
Anthony Pham
Los casos de prueba para n = 3 yn = 4 no tienen el número correcto de caracteres en los bordes superior o inferior
fəˈnɛtɪk
@ fəˈnɛtɪk ¡Gracias! Eso se ha solucionado
Anthony Pham
¿Puedo tomar en Olugar de 0la perilla?
Tito

Respuestas:

9

Carbón ,  41 38 36 30 28 bytes

Gracias a @Emigna por ayudar a guardar dos bytes, gracias a @ ASCII-only por guardar seis bytes, y gracias a @Neil por guardar otros dos bytes.

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

Pruébalo en línea!

Explicación:

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
fuente
1
Puedes moverte a la izquierda del punto de partida en Carbón ¿no? Si es así, comenzar en la punta del controlador debería ahorrar algunos bytes al no tener que retroceder el espacio ya impreso.
Emigna
@ Emmigna Gracias, no lo sabía. Nunca había usado carbón antes.
Steadybox
1
@Steadybox 30 bytes:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
ASCII solo el
1
28 bytes: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 byte guardado al imprimir la mitad inferior de la bandeja haciendo primero lo innecesario y 1 byte guardado invirtiendo los parámetros para ×hacer lo innecesario.)
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 la bandeja de pizza es muy repetitiva, por lo que la función r (diseñada como un literal de plantilla etiquetado) repite el primer carácter de su entrada n veces. Esto maneja la parte superior y media y las líneas de la sartén. El resto se repite reemplazando una cadena de espacios en blanco; las subvenciones $`y $'corresponden automáticamente a un número creciente y decreciente de espacios en blanco, lo que coloca el /y \apropiadamente. Finalmente, los _s se completan en la última línea, ya que es sutilmente diferente de la segunda línea a ese respecto.

Neil
fuente
7

JavaScript + HTML, 575 bytes (solo 451 bytes JS) 376 bytes (solo 482 bytes JS)

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>

No es un enfoque complicado: varias concatenaciones de cuerdas que utilizan condiciones para las cinco partes diferentes de la bandeja: las líneas superior, inferior y media y las mitades superior e inferior.

Acorté tanto como pude, pero era el límite con este método.

EDITAR: no lo fue - adicionalmente jugado por @ programmer5000

Zoltán Schmidt
fuente
Gran primera respuesta! ¡Bienvenido a Programming Puzzles y Code Golf!
Anthony Pham el
¿Fue genial? Quiero decir, tomó mucho más tiempo de lo que debería haber sido y ni siquiera es realmente corto, ¡pero gracias de todos modos!
Zoltán Schmidt
Debería visitar la pregunta sobre consejos de golf para Javascript
Anthony Pham
No sabía que también hay consejos, ¡gracias!
Zoltán Schmidt
2
Bienvenido a PPCG. Para mí, cualquier respuesta que muestre cierto esfuerzo y un intento serio de enfrentar el desafío es una buena respuesta y merece un voto positivo. Buena suerte con los consejos y sugerencias. Mi primer consejo sería: deja de pensar como el tipo de programador con el que te gustaría trabajar en un proyecto y comienza a hacer todas las cosas que odias cuando tomas el código de alguien más (variables de una letra, acceso directo si las declaraciones, 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;

Toma entrada de STDIN; ejecutarlo -nRo probarlo en línea .

Descompostura

// 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
fuente
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,*'\\/_')

Utilicé algunas variables para acortar el código, pero en su mayoría es sencillo. Aquí hay una versión más larga y más legible:

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='_')

Editar: cambiado para leer n desde stdin, 181 → 196 bytes

ArkaneMoose
fuente
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]])

Pruébalo en línea!

ElPedro
fuente
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,'_')

Pruébalo en línea!

Abierto para editar sugerencias para hacerlo más pequeño. :)

Edición 1: +1 byte - Créditos a ElPedro por señalar un error en el código, lo que lo hizo 1 byte más largo.

Edición 2: -4 bytes - Créditos a piyush-ravi para eliminar argumentos innecesarios .

Edición 3: -4 bytes - ¿Cómo no vi eso? :PAG

Edición 4: -2 bytes - Reemplazar '\ n' con ';'

Koishore Roy
fuente
Parece que la primera línea debajo de la línea media no debería estar allí cuando lo pruebo localmente. Lo probé para las entradas 4 y 3 y parece incorrecto. Sin embargo, no retractará el voto hasta que haya tenido tiempo de revisarlo, explicarlo o arreglarlo. Mi culpa por no mirar lo suficiente :)
ElPedro
Gracias por señalarlo ElPedro . Solucionado :)
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/"

Pruébalo en línea!

Toma entrada $n, establece $aen un montón de espacios, $ben un montón de guiones bajos y una cadena concatena eso con un espacio. Eso queda en la tubería.

Bucles de $nabajo a 1. Si $n=1, esto solo se ejecutará una vez. Cada iteración hacemos una cadena de concatenación de espacios, a /, más espacios con contador $iy a \. Todo eso queda en la tubería.

Luego viene la parte media con el asa, que casualmente tiene $a*3espacios en el medio, y $n+3 =signos, luego a 0. Eso queda en la tubería.

Si $nes mayor que 1, entonces $n-1es verdadero, por lo que ingresamos el condicional, donde giramos en la otra dirección para formar el fondo de la bandeja. Si $n=1, entonces no necesitamos esta porción debido a cómo funcionan las líneas. Todo eso queda en la tubería. Terminamos con los espacios y subraya con el $a\$b/fondo de la sartén.

Todas esas cadenas de la canalización se envían por vía implícita Write-Outputque las imprime con nuevas líneas entre los elementos.

AdmBorkBork
fuente
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)>

Sin golf

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

Pruébalo en línea

Johan du Toit
fuente