Glatt wie Teflon

10

Buchstäblich! Der 6. April ist der nationale Teflon-Tag , der mit Teflon-beschichteten Pfannen gefeiert wird (was wir machen werden). nErstellen Sie also bei einer positiven Ganzzahl eine Teflonpfanne. Der Abschnitt "Pfanne" der Pfanne ist ein Achteck, wobei jede seiner Seiten aus nZeichen besteht. Dies hängt davon ab, auf welcher Seite es sich befindet, mit Ausnahme der Seiten, auf denen das Zeichen {oder verwendet wird }. Diese Seiten haben immer eine Zeichenlänge von eins. Wenn nist 1:

  _
 / \
{   }
 \_/

Wie Sie sehen können, besteht jede Seite ein Zeichen (entweder {, }, /, \, oder _). Wenn nist 2:

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

Das Handle wird mit n+3 ='s erstellt und endet mit einer Null ( 0).


Wenn nist einer:

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

n ist 2:

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

n ist 3:

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

Wenn nist 4:

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

Regeln und Kriterien

  • Keine Lücken erlaubt

  • Der Griff kommt auf der rechten Seite heraus (die Seite aus dem }Charakter)

  • Eingabe ist eine positive ganze Zahl

  • Wenn die Seite nicht aus einem {oder }(nicht der linken oder rechten Seite) besteht, bestehen sie aus nentsprechenden Zeichen:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Da dies , gewinnt der kürzeste Code!
Anthony Pham
quelle
Könnten Sie bitte weitere Testfälle hinzufügen?
xnor
@xnor Hinzugefügt zwei weitere
Anthony Pham
Die Testfälle für n = 3 und n = 4 haben nicht die richtige Anzahl von Zeichen am oberen oder unteren Rand
fəˈnɛtɪk
@ fəˈnɛtɪk Danke! Das wurde behoben
Anthony Pham
Kann ich Ostatt 0für den Knopf nehmen?
Titus

Antworten:

9

Holzkohle ,  41 38 36 30 28 Bytes

Vielen Dank an @Emigna für die Unterstützung beim Speichern von zwei Bytes, danke an @ ASCII-only für das Speichern von sechs Bytes und danke an @Neil für das Speichern weiterer zwei Bytes!

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

Probieren Sie es online aus!

Erläuterung:

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
quelle
1
Sie können sich in Charcoal links vom Startpunkt bewegen, nicht wahr? Wenn dies der Fall ist, sollten Sie ab der Spitze des Handles einige Bytes sparen, da Sie nicht bereits gedruckten Speicherplatz zurückverfolgen müssen.
Emigna
@ Emigna Danke, das wusste ich nicht. Ich hatte noch nie Holzkohle verwendet.
Steadybox
1
@Steadybox 30 Bytes:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
Nur ASCII-
1
28 Bytes: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 Byte gespeichert durch die untere Hälfte der Pfanne Druck zunächst die Herstellung unnötig und 1 Byte durch Umkehren des Parameters gespeichert , ×die machen nicht erforderlich.)
Neil
7

JavaScript (ES6), 171 Byte

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>

Die gesamte Pizzapfanne wiederholt sich sehr oft, sodass die Funktion r (als markiertes Vorlagenliteral konzipiert) das erste Zeichen ihrer Eingabe n-mal wiederholt. Dies behandelt die Ober- und Mitte sowie die Linien der Pfanne. Der Rest wird wiederholt, indem eine Reihe von Leerzeichen ersetzt wird. Die $`und $'Unterteilungen entsprechen automatisch einer zunehmenden und abnehmenden Anzahl von Leerzeichen, wodurch die /und \entsprechend positioniert werden. Schließlich werden die _s in der letzten Zeile ausgefüllt, da sie sich in dieser Hinsicht geringfügig von der zweiten Zeile unterscheiden.

Neil
quelle
7

JavaScript + HTML, 575 Bytes (nur 451 Bytes JS) 376 Bytes (nur 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>

Kein komplizierter Ansatz: Mehrere String-Verkettungen unter Verwendung von Bedingungen für die fünf verschiedenen Teile der Pfanne: die oberste, unterste und mittlere Linie sowie die obere und untere Hälfte.

Ich habe so viel gekürzt, wie ich konnte, aber es war die Grenze bei dieser Methode.

EDIT: es war nicht - zusätzlich von @ programmer5000 Golf gespielt

Zoltán Schmidt
quelle
Tolle erste Antwort! Willkommen bei Programming Puzzles und Code Golf!
Anthony Pham
War es großartig Ich meine, es hat viel länger gedauert, als es hätte sein sollen und ist nicht einmal wirklich kurz - aber trotzdem danke!
Zoltán Schmidt
Sie sollten die Frage zu Golftipps für Javascript
Anthony Pham
Wusste nicht, dass es auch Tipps gibt - danke!
Zoltán Schmidt
2
Willkommen bei PPCG. Für mich ist jede Antwort, die einige Anstrengungen und einen ernsthaften Versuch zeigt, sich der Herausforderung zu stellen, eine gute Antwort und verdient eine positive Bewertung. Viel Glück mit den Hinweisen und Tipps. Mein erster Tipp wäre, aufhören zu denken wie ein Programmierer, mit dem Sie an einem Projekt arbeiten möchten, und all die Dinge zu tun, die Sie hassen, wenn Sie einen anderen Code übernehmen (Ein-Buchstaben-Variablen, Verknüpfung if-Anweisungen usw.) .) :)
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;

Nimmt Eingaben von STDIN entgegen; Laufen Sie mit -nRoder testen Sie es online .

Nervenzusammenbruch

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

Ich habe ein paar Variablen verwendet, um den Code zu verkürzen, aber es ist meistens einfach. Hier ist eine längere, besser lesbare Version:

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

Bearbeiten: geändert, um n von stdin zu lesen, 181 → 196 Bytes

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

Probieren Sie es online aus!

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

Probieren Sie es online aus!

Öffnen Sie diese Option, um Vorschläge zu bearbeiten und sie zu verkleinern. :) :)

Bearbeiten 1: +1 Byte - Dank an ElPedro für den Hinweis auf einen Fehler im Code, der den Code um 1 Byte verlängert hat.

Edit 2: -4 Bytes - Dank an piyush-ravi für das Entfernen unnötiger Argumente.

Edit 3: -4 Bytes - Wie habe ich das nicht gesehen? : P.

Edit 4: -2 Bytes - Ersetzen von '\ n' durch ';'

Koishore Roy
quelle
Es sieht so aus, als ob die erste Zeile unter der mittleren Zeile nicht vorhanden sein sollte, wenn ich es lokal versuche. versuchte es für Eingang 4 und 3 und es sieht falsch aus. Die Upvote wird erst zurückgezogen, wenn Sie Zeit hatten, sie zu überprüfen und zu erklären oder zu korrigieren. Mein Fehler, weil
ich
Vielen Dank für den Hinweis auf ElPedro .
Behoben
2

PowerShell , 165 Byte

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

Probieren Sie es online aus!

Übernimmt Eingaben $n, setzt $aauf eine Reihe von Leerzeichen, $bauf eine Reihe von Unterstrichen, und die Zeichenfolge verkettet diese mit einem Leerzeichen. Das bleibt in der Pipeline.

Schleifen von $nunten nach 1. Wenn ja $n=1, wird dies nur einmal ausgeführt. Bei jeder Iteration führen wir eine Zeichenfolgenverkettung von Leerzeichen, a /, mehr Leerzeichen mit Zähler $iund a durch \. Diese sind alle in der Pipeline.

Dann kommt der mittlere Teil mit dem Griff, die zufällig haben $a*3Räume in der Mitte, und $n+3 =Zeichen, dann ein 0. Das bleibt in der Pipeline.

Wenn $ngrößer als ist 1, dann $n-1ist es wahr, also geben wir die Bedingung ein, wo wir die andere Richtung schleifen, um den Boden der Pfanne zu bilden. Wenn $n=1ja, dann brauchen wir diesen Teil aufgrund der Funktionsweise der Linien nicht. Diese sind alle in der Pipeline. Wir beenden mit den Leerzeichen und unterstreichen mit dem $a\$b/Boden der Pfanne.

Alle diese Zeichenfolgen aus der Pipeline werden implizit gesendet Write-Outputund mit Zeilenumbrüchen zwischen den Elementen gedruckt.

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

Nicht Golf gespielt

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

Probieren Sie es online aus

Johan du Toit
quelle