Lisse comme du téflon

10

Au sens propre! Le 6 avril est la Journée nationale du téflon , qui est célébrée avec des casseroles recouvertes de téflon (ce que nous ferons). Donc, étant donné un entier positif n, créez un moule en téflon. La section "pan" de la casserole est un octogone avec chacun de ses côtés composé de ncaractères, qui variera en fonction de quel côté il est sauf pour les côtés utilisant le caractère {ou }. Ces côtés auront toujours une longueur de caractère d'un. Si nest 1:

  _
 / \
{   }
 \_/

Comme vous pouvez le voir, chaque côté se compose d'un caractère (soit {, }, /, \ou _). Si nest 2:

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

Le handle sera créé avec n+3 ='s et se terminera par un zéro ( 0).


Si nest un:

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

n est 2:

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

n est 3:

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

Si nest 4:

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

Règles et critères

  • Aucune échappatoire autorisée

  • La poignée sort du côté droit (le côté fait du }personnage)

  • L'entrée est un entier positif

  • Si le côté ne se compose pas de {ou }(ni du côté gauche ou droit), ils seront constitués de ncaractères respectifs:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Puisqu'il s'agit de , le code le plus court gagne!
Anthony Pham
la source
Pourriez-vous s'il vous plaît ajouter plus de cas de test?
xnor
@xnor Ajout de deux autres
Anthony Pham
Les cas de test pour n = 3 et n = 4 n'ont pas le bon nombre de caractères sur les bords supérieur ou inférieur
fəˈnɛtɪk
@ fəˈnɛtɪk Merci! Cela a été corrigé
Anthony Pham
Puis-je prendre Oau lieu de 0pour le bouton?
Titus

Réponses:

9

Fusain ,  41 38 36 30 28 octets

Merci à @Emigna d'avoir aidé à sauver deux octets, merci à @ ASCII uniquement pour avoir sauvé six octets, et merci à @Neil pour avoir sauvé encore deux octets!

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

Essayez-le en ligne!

Explication:

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
la source
1
Vous pouvez vous déplacer à gauche du point de départ au charbon de bois n'est-ce pas? Si c'est le cas, commencer à la pointe de la poignée devrait permettre d'économiser quelques octets en évitant de revenir en arrière dans l'espace déjà imprimé.
Emigna
@Emigna Merci, je ne le savais pas. Je n'avais jamais utilisé de charbon avant.
Steadybox
1
@Steadybox 30 octets:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
ASCII uniquement le
1
28 octets: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 octet enregistré en imprimant d'abord la moitié inférieure du panoramique rendant l' inutile et 1 octet enregistré en inversant les paramètres pour ×rendre l' inutile.)
Neil
7

JavaScript (ES6), 171 octets

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>

L'ensemble du moule à pizza est très répétitif, de sorte que la fonction r (conçue comme un littéral de modèle balisé) répète le premier caractère de son entrée n fois. Cela gère le haut et le milieu et les lignes de la casserole. Le reste est répété en remplaçant une chaîne de blancs; les $`et les $'substitutions correspondent automatiquement à un nombre croissant et décroissant de blancs positionnant ainsi le /et de \manière appropriée. Enfin, les _s sont remplis sur la dernière ligne car ils sont subtilement différents de la deuxième ligne à cet égard.

Neil
la source
7

JavaScript + HTML, 575 octets (451 octets uniquement JS) 376 octets (482 octets uniquement 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>

Pas une approche compliquée: plusieurs enchaînements de cordes utilisant des conditions pour les cinq différentes parties de la casserole: les lignes supérieures, inférieures et moyennes et les moitiés supérieure et inférieure.

J'ai raccourci autant que possible, mais c'était la limite avec cette méthode.

EDIT: ce n'était pas - en plus joué par @ programmer5000

Zoltán Schmidt
la source
Grande première réponse! Bienvenue dans Programmation d'énigmes et Code Golf!
Anthony Pham
C'était génial? Je veux dire, ça a pris beaucoup plus de temps à faire que ça aurait dû et ce n'est même pas vraiment court - mais merci quand même!
Zoltán Schmidt
Vous devriez visiter la question sur les conseils de golf pour Javascript
Anthony Pham
Je ne savais pas qu'il y avait aussi des conseils - merci!
Zoltán Schmidt
2
Bienvenue chez PPCG. Pour moi, toute réponse qui montre un certain effort et une tentative sérieuse de relever le défi est une bonne réponse et mérite un vote positif. Bonne chance avec les trucs et astuces. Ma première astuce serait, arrêtez de penser comme le genre de programmeur avec lequel vous voudriez travailler sur un projet et commencez à faire toutes les choses que vous détestez lorsque vous reprenez le code elses de quelqu'un (variables à une lettre, raccourcis si instructions, etc. .) :)
ElPedro
4

PHP, 174 octets

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;

Prend l'entrée de STDIN; exécuter -nRou tester en ligne .

panne

// 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
la source
4

Python 3, 196 octets

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

J'ai utilisé quelques variables pour raccourcir le code, mais c'est surtout simple. Voici une version plus longue et plus lisible:

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

Modifier: changé pour lire n à partir de stdin, 181 → 196 octets

ArkaneMoose
la source
3

Python 2 , 180 178 octets

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

Essayez-le en ligne!

ElPedro
la source
3

Python 2.7, 194 195 191 191 187 185 octets

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

Essayez-le en ligne!

Ouvert pour modifier les suggestions afin de le réduire. :)

Edit 1: +1 byte - Crédits à ElPedro pour avoir signalé une erreur dans le code, ce qui l'a rendu 1 octet plus long.

Edit 2: -4 octets - Crédits à piyush-ravi pour supprimer les arguments inutiles .

Modifier 3: -4 octets - Comment n'ai-je pas vu cela? : P

Modifier 4: -2 octets - Remplacer '\ n' par ';'

Koishore Roy
la source
Il semble que la première ligne en dessous de la ligne médiane ne devrait pas être là lorsque je l'essaie localement. essayé pour les entrées 4 et 3 et ça ne va pas. Ne rétractera pas le vote positif tant que vous n'aurez pas eu le temps de le réviser, de l'expliquer ou de le corriger. Ma faute de ne pas avoir cherché assez fort :)
ElPedro
Merci de l'avoir signalé ElPedro . Corrigé :)
Koishore Roy
2

PowerShell , 165 octets

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

Essayez-le en ligne!

Prend l'entrée $n, définit $aun tas d'espaces, $bun tas de traits de soulignement et la chaîne concatène cela avec un espace. Cela reste sur le pipeline.

Boucles de $nbas en haut 1. Si $n=1, cela ne s'exécutera qu'une seule fois. À chaque itération, nous faisons une concaténation de chaînes d'espaces, a /, plus d'espaces avec compteur $iet a \. Tout cela est laissé sur le pipeline.

Vient ensuite la partie centrale avec la poignée, qui a par coïncidence des $a*3espaces au milieu, et des $n+3 =signes, puis a 0. Cela reste sur le pipeline.

Si $nest plus grand que 1, alors $n-1est véridique, alors nous entrons dans le conditionnel, où nous bouclons l'autre direction pour former le fond de la casserole. Si $n=1, alors nous n'avons pas besoin de cette portion en raison du fonctionnement des lignes. Tout cela est laissé sur le pipeline. On termine avec les espaces et souligne avec le $a\$b/fond de la casserole.

Toutes ces chaînes du pipeline sont envoyées via implicite Write-Outputqui les imprime avec des retours à la ligne entre les éléments.

AdmBorkBork
la source
2

JavaScript + HTML - 346 octets

JavaScript - 314 octets, HTML - 32 octets

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

Non 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
la source
0

C, 249 octets

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

Essayez-le en ligne

Johan du Toit
la source