Hier ist ein ASCII-Kürbis, der in eine Kürbislaterne geschnitzt ist. Ist es nicht süß?
((^v^))
Hier ist ein ASCII-Geist. Schau wie gruselig es ist!
\{O.O}/
Offensichtlich müssen die Kürbisse auf dem Boden sein, mit einem Abstand zwischen ihnen, damit sie nicht verrotten.
Geister stehen jedoch gerne auf Kürbissen, sodass sie noch gruseliger sind . Sie müssen sich jedoch auf zwei Kürbisse stellen, sonst wird ihr gespenstisches Gewicht den Kürbis unter ihnen zerdrücken. Aber wegen , wie sie ihre geisterhafte Magie funktioniert, können mehrere Geister stapeln und mit anderen teilen Kürbisse, vorausgesetzt , dass die Geister sind entweder Split gleichmäßig auf den unteren Kürbisse oder den unteren Geister. Mit anderen Worten, eine Form wie eine menschliche Pyramide bilden . Beachten Sie, dass Geister nur dann auf Geister stapeln können, wenn sich ein Kürbis darunter befindet (so funktioniert die Magie).
Wenn zwei nicht negative ganze Zahlen gegeben sind g
und p
die Anzahl der g
Hosts und p
Umpkins repräsentieren, wird gemäß den obigen Pyramidenstapelregeln die am weitesten links liegende Formation ausgegeben, die möglichst kompakt ist. Übrig gebliebene Kürbisse und Geister (dh solche, die nicht die Pyramide bilden) gehen rechts auf den Boden.
Zur Verdeutlichung sind diese Formationen in Ordnung (durch leere Zeilenumbrüche getrennt) und dienen als Beispiel-E / A:
0p 1g
\{O.O}/
1p 0g
((^v^))
1p 1g
((^v^)) \{O.O}/
2p 1g
\{O.O}/
((^v^)) ((^v^))
2p 2g
\{O.O}/
((^v^)) ((^v^)) \{O.O}/
3p 1g
\{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 2g
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 3g
\{O.O}/
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
0p 4g
\{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/
3p 0g
((^v^)) ((^v^)) ((^v^))
7p 6g
\{O.O}/
\{O.O}/ \{O.O}/
\{O.O}/ \{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^))
Diese Formationen sind nicht OK
\{O.O}/
((^v^))
\{O.O}/
((^v^))
((^v^)) ((^v^)) \{O.O}/
\{O.O}/
\{O.O}/
((^v^)) ((^v^))
\{O.O}/
\{O.O}/ ((^v^)) ((^v^))
((^v^))
((^v^)) ((^v^))
\{O.O}/
((^v^)) ((^v^))
Eingang
Zwei nicht negative ganze Zahlen in einem beliebigen Format . Mindestens eine der Zahlen ist ungleich Null. Sie können die Eingaben in beliebiger Reihenfolge vornehmen (z. B. in den Beispielen, in denen ich zuerst Kürbisse hatte). Geben Sie in Ihrer Antwort an, wie Sie Eingaben vornehmen.
Ausgabe
Eine ASCII-artige Darstellung der Geister und Kürbisse nach den obigen Regeln. Führende / nachfolgende Zeilenumbrüche oder andere Leerzeichen sind optional, sofern die Geister und Kürbisse richtig ausgerichtet sind.
Regeln
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Antworten:
JavaScript (ES7),
166164159 Bytes5 Bytes gespart dank Neil
Formatiert und kommentiert
Grundlegende Mathematik
Der schwierige Teil ist, die optimale Breite
G
der Geisterpyramide herauszufinden .Die Anzahl der Geister
g
in einer solchen Pyramide ergibt sich aus:Umgekehrt ist die Breite einer Pyramide, die
g
Geister enthält, die wahre Wurzel der resultierenden quadratischen Gleichung:Dies führt zu folgender reellen Wurzel (auch Dreieckswurzel genannt ):
Die Breite der Pyramide ist jedoch auch durch die Anzahl der Kürbisse begrenzt: Wir können nicht mehr als
p-1
Geister überp
Kürbisse haben. Daher die endgültige Formel, die im Code verwendet wird:ES6-Version,
173171166 BytesTestfälle (ES6)
Code-Snippet anzeigen
quelle
j=(g+g)**.5+.5|0
sollte funktionieren.Perl, 246 Byte (Zeilenumbrüche sind nicht Teil des Codes und dienen ausschließlich der Lesbarkeit)
Akzeptiert zwei Zahlen: zuerst Kürbisse, dann Geister. Beispieleingabe:
Beispielausgabe:
quelle
0p 4g
Testfall alle Geister in einer Zeile angeordnet und nicht gestapelt.