Sie sollten ein Programm oder eine Funktion schreiben, die das Volumen einer Schüssel und das Volumen des Wassers als Ein- und Ausgabe empfängt oder eine ASCII-Darstellung einer Schüssel mit Wasser mit den gewünschten Volumina zurückgibt.
Eine Schüssel hat folgende Struktur:
\ /
\___/
Die Schüssel hat mindestens einen _
Charakter. Die Anzahl von \
's und /
' s ist ebenfalls positiv und sie sind aufgrund der Symmetrie gleich.
Das Volumen der Schüssel ist die Gesamtzahl _
und die space
Zeichen zwischen \
's und /
' s plus eins für jedes Paar von \
und /
. Dies bedeutet, dass die obige Schüssel das Volumen von 10
:
\ / => xxxxx x (the last one is for the \/ pair)
\___/ xxx x (the last one is for the \/ pair)
Beachten Sie, dass zwei verschiedene Schalen das gleiche Volumen haben können. ZB haben beide folgenden Schalen ein Volumen von 18:
\ /
\ / \ /
\___/ \_______/
Wir können etwas Wasser in die Schüssel gießen. Das Wasser wird als eine Reihe von ~
Zeichen anstelle von Leerzeichen in der Schüssel dargestellt. Die unterste Zeile enthält keine Leerzeichen und darf daher keine ~
s enthalten. Dies bedeutet, dass unser Beispiel nur auf eine Weise mit Wasser gefüllt werden kann:
\~~~~~/
\___/
Andere Schalen können auf verschiedene Arten gefüllt werden:
\~~~~~/ \ /
\ / \~~~/
\_/ \_/
Das Volumen des Wassers in einer Schüssel ist das Volumen der Schüsselreihen unter den ~
Zeichen. Die obigen Beispiele haben jeweils ein Wasservolumen von 4, 6 and 2
.
Eingang
- Zwei positive ganze Zahlen, das Volumen der Schüssel und das Volumen des Wassers.
- Sie können die Reihenfolge der beiden Zahlen wählen.
- Die zwei Ganzzahlen können in jedem gängigen Listenformat (Liste, Tupel, Array usw.) oder als zwei separate Ganzzahlen eingegeben werden.
- Für die Eingabewerte ist mindestens eine gültige Schüsselwasserkonfiguration garantiert.
Ausgabe
- Die ASCII-Darstellung einer Schüssel mit Wasser, wobei Schüssel und Wasservolumen mit der Eingabe übereinstimmen.
- Wenn Sie das Ergebnis zurückgeben möchten, anstatt es zu drucken, sollte es als einzelne Zeichenfolge (oder als die nächstliegende Alternative Ihrer Sprache) zurückgegeben werden.
- Jedes nachfolgende Leerzeichen ist zulässig.
- Es ist kein unnötiges führendes Leerzeichen zulässig.
- Wenn es mehrere richtige Konfigurationen gibt, können Sie frei wählen, welche Sie ausgeben, aber Sie können nur eine davon ausgeben.
Beispiele
Jedem ganzzahligen Eingangspaar folgen ein oder mehrere mögliche Ausgänge.
6 2
\~~~/
\_/
10 4
\~~~~~/
\___/
24 8
\ /
\~~~~~~/
\ /
\__/
42 12 //either of the two output is correct
\ /
\ /
\~~~~~~~/
\ /
\ /
\_/
\ /
\~~~~~~~~~~~~~/
\___________/
90 68
\~~~~~~~~~~~~~~~~~~~~~/
\ /
\ /
\ /
\_____________/
102 42
\ /
\ /
\~~~~~~~~~~~~~~~~~/
\ /
\ /
\___________/
Dies ist Codegolf, also gewinnt der kürzeste Eintrag.
quelle
At least one valid bowl-water configuration is guaranteed for the input values.
- OPJavascript ES5, 364 Bytes
Das ist es, was ich mir während des Mittagessens schnell einfallen lassen könnte, hilf mir beim Golfspielen, während meine Schicht endet!
Quelle
Golf gespielt:
(Minifier zum Komprimieren durchlaufen, Mittagsschicht beendet)
quelle
Perl,
227172 BytesFühren Sie mit der Option -n aus:
Vielen Dank an Dennis für die Hilfe beim Golfspielen.
Berechnet das Schüsselvolumen als Höhe * (Breite + Höhe), wobei Breite die Anzahl der
_
Zeichen und Höhe die Anzahl der\
Zeichen ist.Jede Kombination von Höhe und Breite wird in einem Paar verschachtelter Schleifen getestet, bis das richtige Schüsselvolumen gefunden ist. Anschließend wird eine weitere Schleife über mögliche Wasserhöhenniveaus durchgeführt, um festzustellen, ob mit dieser Breite das richtige Wasservolumen möglich ist.
Sie können die dritte Schleife entfernen, indem Sie einfach den Wasserstand mithilfe der quadratischen Formel mit a als 1, b als Breite und c als Negativ des gewünschten Wasservolumens berechnen und überprüfen, ob es sich um eine Ganzzahl handelt. Dies erfordert jedoch mehr Bytes als nur eine Schleife zu machen. Hier ist es trotzdem (183 Bytes):
quelle
Python 2, 162 Bytes
Ein bisschen chaotisch, aber hier ist mein erster Versuch. Es wird versucht, alle möglichen Zeilenzahlen anzugeben
r
, wobei die Anzahl der Basisunterstriche festgelegt wirda = V/r-r
. Dann probiert es alle möglichen Wasserstandshöhen ausk
und prüft, ob die Schüssel gültig ist, und druckt sie gegebenenfalls aus.quelle
Python 2.7,
284270260 BytesDies berechnet im Grunde die Höhe und Breite des Eimers und des Wassers und druckt sie aus.
Es wurde versucht, den hässlichen Teil der while-Schleife am Anfang zu entfernen (wobei ich die Höhe des Eimers und die Höhe, aus der Wasser gezogen werden soll, berechne. Zur Zeit dienen alle Linien im Code mit Ausnahme der letzten zur Berechnung der Breite und Höhe). Versuchen Sie immer noch: P
Testen Sie es für verschiedene Fälle -
quelle