Mach mir eine Pizza


17

Weil es Samstag (UTC) ist und ich Hunger habe, hätte ich gerne ein Stück Pizza. Ich gebe dir eine Bestellung und möchte eine schöne heiße Pizza. Der Herausforderung gewachsen?

Die Drive-Thru

Ich werde meine Bestellung überall dort aufgeben, wo sich Ihr Laufwerk befindet, ob es sich um STDIN, einen Funktionsparameter oder ein Befehlszeilenargument handelt, aber ich werde es nicht in eine Variable für Sie einfügen. (JS-Funktionsausdrücke müssen einer Variablen zugewiesen werden.)

Die Bestellung

Meine Bestellung wird 2 Teile haben. Die erste ist eine positive Ganzzahl ungleich Null von 3bis 6. Das ist die Größe meiner Pizza. Zum Beispiel würde eine Größe 6Pizza ohne Belag wie folgt aussehen:

 /=====\
/       \
|       |
|       |
\       /
 \=====/

Eine Größe 5:

 /====\
/      \
|      |
\      /
 \====/

Eine Größe 4:

 /===\
|     |
|     |
 \===/

Eine Größe 3

 /==\
|    |
 \==/

Die Beläge

Meine Beläge werden eine Folge von Großbuchstaben sein. Hier sind die möglichen Werte:

P - Peperoni
S - Wurst
N - piNeapple
J - Jalapenos
B - Bananenpaprika
C - baCon

Sie müssen irgendwo auf die Pizza passen. Wenn ich Größe 4 und bestelle PSPCJ, ist dies eine gültige Ausgabe:

 /===\
|PSPCJ|
|     |
 \===/

Also das ist:

 /===\
|P P J|
| S C |
 \===/

Und das:

 /===\
|     |
|PSPCJ|
 \===/

Ich bin nicht sehr wählerisch, wo sich meine Beläge auf der Pizza befinden, solange sie nicht auf der Kruste oder übereinander liegen.

Das Abholfenster

Ich werde an viele Orte gehen, um meine Pizza abzuholen, einschließlich STDOUT, eine Datei, den Rückgabewert einer Funktion, aber keine Variable.

Zusätzliches Zeug

  • Standardlücken verboten
  • Dies ist mit so dass die kürzeste Antwort in Bytes gewinnt!
  • Mach dir keine Sorgen über ungültige Eingaben (Beläge> Pizzaraum usw.)
  • Siehe meine Antwort (JS ES6) unten für ein Beispiel (ich hoffe, Sie können es besser machen)

3
Ähm, kannst du deine Pizza also auch auf einem Drive-Thru abholen?
Matthew Roh

1
Sind Sie wählerisch, wenn ich die oberen rechten und unteren rechten Ecken der Pizzaschachtel mit Leerzeichen fülle? ;)
DLosc

1
@DLosc nein, ein nachfolgendes Leerzeichen am Ende einer Zeile (einschließlich eines nachfolgenden Zeilenumbruchs am Ende der Ausgabe) ist optional, aber nicht erforderlich.
programmer5000

1
Kann die PIZZA mehr als eine für einen den Toppings ̶ Also , wenn Sie wie Ananas: ̶ ̶ ̶5̶,̶ ̶N̶N̶N̶̶ ist auch ein gültiger Eingang ̶ (oder sollte es ̶ ̶5̶,̶ ̶N̶̶ anstelle) ̶ ̶ Auch dort, wo die Pilze ..? :( BEARBEITEN: Vergiss die erste Frage, ich sehe deine Testfälle hat 2x P.
Kevin Cruijssen

Kann ich einen Bestelllink posten ? xD
FantaC

Antworten:


1

Pip , 87 81 75 Bytes

74 Byte Code, +1 für -lFlag.

e:'/.'=Xa-1.'\Y['/'\]Xa//5J'|X2-a%2^xPs.ePy.(b.sXa*a-a-2-#b<>a+1).RVys.RVe

Übernimmt Eingaben als Befehlszeilenargumente. Probieren Sie es online!

Ansatz

e ist die oberste Reihe, wie z /=====\ . Wenn Sie es umkehren, ist es auch die unterste Reihe.

y ist der linke Rand, wie z ["/" "|" "|" "\"] . Wenn Sie es umkehren, ist es auch der rechte Rand.

Wir konstruieren dann die Mitte, indem wir bdie Beläge nehmen und sie mit Leerzeichen auf Länge auffüllen(a+1)*(a-2) (wo aist die Größe) und sie in eine Liste von Zeilen gruppieren.

Schließlich drucken wir die oberste Zeile mit einem führenden Leerzeichen. verketten Sie die Mitte zwischen ylinks und RVyrechts und drucken Sie diese aus; und drucken Sie die unterste Zeile mit einem führenden Leerzeichen.


Funktioniert das mit einer Käsepizza (ohne Belag)?
programmer5000

@ programmer5000 Ja - in diesem Fall sollte das zweite cmdline-Argument eine leere Zeichenfolge sein (wenn Sie es von einer tatsächlichen Befehlszeile aus ausführen, müssen Sie es in Anführungszeichen setzen).
DLosc

5

Python 2 , 202, 198, 190, 177, 162, 157, 146 Bytes

n,t=input()
y=n+1
s=' '
l=' /'+'='*(n-1)+'\\ '+('','\n/'+s*y+'\\')[n>4]+'\n|'
print l+t[:y].center(y,s)+('','|\n|'+t[y:].center(y,s))[y%2]+l[::-1]

Probieren Sie es online!


Hey, können Sie zuweisen '\\', '|‘und '/den Variablen zum Golf aus wenigen Bytes? Auf diese Weise habe ich meine JS-Antwort stark reduziert.
programmer5000

Daran arbeite ich gerade !!!!
Keerthana Prabhakaran

1
Können Sie auch das erste (n-1)mit (--n), das n>4s mit n>3, (n+1)mit (n+2)und das letzte (n-1)mit ersetzen n, um 4 Bytes zu sparen?
programmer5000

2
Python unterstützt --Operator nicht!
Keerthana Prabhakaran


2

Python 3 , 224 213 195 Bytes

n,t=eval(input())
k=n+1
y=print
i=0
f,s,e,b,p="/ =\\|"
t+=s*99
y(s+f+e*~-n+b)
if n>4:y(f+t[:k]+b);i+=k
y(p+t[i:i+k]+p);i+=k
if~-n%2:y(p+t[i:i+k]+p);i+=k
if n>4:y(b+t[i:i+k]+f);i+=k
y(s+b+e*~-n+f)

Probieren Sie es online!


1

JavaScript (ES6), 170 bis 161 Byte

(n,t,a=[1,,n%2||2,,1])=>` /=\\
/___\\
|___|
\\___/
 \\=/`[r=`replace`](/.+/g,s=>s.repeat(a.pop()||n>4))[r](/=|_\b/g,`$&`.repeat(n-1))[r](/_/g,_=>t[i++]||` `,i=0)

Beginnt damit, eine falsch geformte Pizza der Breite 2 und Höhe 5 zu nehmen, sie horizontal zu strecken und vertikal anzupassen, und ersetzt das Innere durch Beläge oder Leerzeichen, sobald sie ausgehen.


0

JS (ES6), 257 255 249 248 246 244 Bytes

m=s=>t=>(r="/",k="\\",p=" ",f="\n",x="|",c=f+x,q="",t=p+t,z=(s>2?p:q)+r+"=".repeat(s-1)+k+(s>4?f+r+p.repeat(++s)+k:q)+c+p.repeat(s)+x+(!s?c+p.repeat(s)+x:q)+p+(s>5?f+k+p.repeat(s)+r:q)+f+p+k+"=".repeat(s-2)+r,i=-1,z.replace(/ /g, x=>t[++i]||p))

Nennen Sie es wie m(4)("PS")für 1 Peperoni und 1 Wurst. Wahrscheinlich kann mehr golfen werden.


1
Herrgott, gib anderen Leuten Zeit, um zu antworten: P
Pavel

1
@ Григорий Перельман Ich wollte nur ein Beispiel geben, ich hoffe, das gewinnt nicht.
programmer5000

0

Kohle , 37 Bytes

Nθ /==×=⸿/›θ⁴⸿|‖BO↓﹪θ²‖BO⊕﹪θ²J¹¦¹⪪S⊕θ

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

Nθ

Geben Sie die Größe der Pizza ein.

 /==

Beginnen Sie, die Oberseite der Pizza zu drucken.

×=⸿/›θ⁴

Wenn die Pizza eine der größeren Größen ist, fügen Sie zusätzliche oben und seitlich hinzu.

⸿|

Drucken Sie mehr von der Seite der Pizza.

‖BO↓﹪θ²

Vervollständige die linke Hälfte der Pizza durch Reflektion mit möglicher Überlappung.

‖BO⊕﹪θ²

Ergänzen Sie die Pizza durch Spiegelung mit variabler Überlappung.

J¹¦¹⪪S⊕θ

Geben Sie die Beläge ein und teilen Sie sie in Stücke, damit sie in die Pizza passen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.