Intro
Betrachten Sie ein Raster der Zeichen f A\/wie
f f f
A
A / \
\ / A
A \/
/
\/
woher:
fstellt einen Wasserhahn dar, der einen Wasserstrahl nach unten gießtAteilt den Wasserstrom oben auf, so dass genau die Hälfte nach links und genau die Hälfte nach rechts geht\verschiebt den Wasserstrom um eine Einheit nach oben rechts/verschiebt den Wasserstrom um eine Einheit nach oben links- Die Kombination
\/erzeugt einen Trog mit unendlicher Kapazität, der die darüber fließenden Wasserströme sammelt [space]ist ein leerer Raum, durch den sich das Wasser bewegen kann
Daraus können wir uns den Weg vorstellen, den das Wasser ( *) nehmen würde, wenn es aus den Wasserhähnen kommt und entweder in die Tröge oder aus dem Gitterbereich fällt:
f f f <-- first second and third faucets
* * *A*
* *A*/ \*
\*/ * *A <-- a '*' is not drawn to the right of this A because it would be out of the 9×7 bounds
* *A*\/ <-- upper trough
**/ *
\/ * <-- lower trough
Angenommen, die 3 Wasserhähne geben nacheinander die gleiche Menge Wasser ab, dann können wir das sehen
- Das gesamte Wasser des ersten Wasserhahns fließt in den unteren Trog.
- Eine Hälfte des Wassers des zweiten Wasserhahns fließt in den unteren Trog und die andere Hälfte wird zwischen dem unteren Trog und dem Abfallen vom Gitter aufgeteilt.
- Ein Viertel des Wassers des dritten Wasserhahns fließt in den unteren Trog, ein Viertel fällt vom Boden des Gitters ab, ein Viertel fließt in den oberen Trog und ein Viertel fällt rechts vom Gitter ab.
Daran können wir erkennen, dass (1 + 3/4 + 1/4 + 1/4) / 3 = 75%das Wasser von den Trögen aufgefangen wird und (1/4 + 1/4 + 1/4) / 3 = 25%vom Gitter fällt.
Herausforderungen
Sie können einige oder alle dieser Herausforderungen im Zusammenhang mit dieser ASCII-Wasserflusskonfiguration abschließen. Sie sind alle Code-Golf, die kürzeste Antwort für jede Herausforderung ist der Gewinner. Die akzeptierte Antwort ist die Person, die die meisten Herausforderungen mit der Gesamtcodelänge als Unentschieden meistert.
Herausforderung 1
Schreiben Sie ein Programm, das den Anteil des Wassers ausgibt, der für ein bestimmtes Gitter in Tröge fließt. Die Ausgabe des obigen Beispiels wäre einfach 0.75.
Herausforderung 2
Schreiben Sie ein Programm, das *anhand eines Rasters die Stellen zeichnet , an denen das Wasser fließt, wie oben beschrieben. Sie sollten nichts außer Leerzeichen überschreiben, und das Raster sollte die Größe nicht ändern. Also für sowas
f
/A
Es muss nichts getan werden, da, obwohl Wasser auf beiden Seiten des A fließt, es nicht nach links gezogen werden kann, ohne das A zu entfernen, /und es nicht nach rechts gezogen werden kann, ohne das 2 × 2-Gitter zu vergrößern.
Herausforderung 3 (aktualisiert)
Schreiben Sie ein Programm, das zwei nicht-negative ganze Zahlen, die Summe T und die Menge, um K zu behalten, enthält (T> = K). Erzeugen und zeichnen Sie ein Gitter mit genau einem fsolchen, dass genau K in Tröge fließt, wenn dieser Wasserhahn T Wassereinheiten ausgießt. Wenn dies in einem endlichen Gitter für ein bestimmtes (T, K) Paar nicht möglich ist, geben Sie 'Impossible' aus.
Klarstellungen (gelten für alle Herausforderungen)
- Die Eingabe kann über stdin, eine Datei oder sogar einen Funktionsaufruf in der Zeichenfolgendarstellung des Rasters erfolgen. Machen Sie einfach klar, wie Sie verschiedene Eingaben ausführen.
- Die Ausgabe muss auf stdout gehen.
\AundA/undAAsind auch Tröge, wie Sie es erwarten würden.- Ein wxh-Raster ist immer ein gut formatiertes Rechteck aus w * h-Zeichen ohne Zeilenumbruch. Es werden keine nachgestellten Leerzeichen fehlen und keine Vorkommen von
*. - Die Rastermaße können so klein wie 1 × 1 und beliebig groß sein. (Beliebig groß innerhalb der Vernunft, int.maxValue oder dergleichen ist eine akzeptable Grenze. Gleiches gilt für T und K.)
- Ein Strom über einem
ffließt durch ihn hindurch. - Die Wasserhähne können überall sein, nicht nur in der obersten Reihe.
Ateilt immer genau die Hälfte der Wassermenge auf.
Hinweis: Dinge wie /Aund //sind vollkommen gültig. Das Wasser fließt frei zwischen den Charakteren (obwohl für Herausforderung 2 nicht genügend Platz zum Zeichnen vorhanden ist).
Also im Setup
ff
/A
Der linke fStrom ergießt sich, trifft auf /und verschiebt sich nach links. Der rechte fStrom ergießt sich, trifft den A, die Hälfte geht nach rechts und die Hälfte geht nach links zwischen dem Aund dem /.
z.B
ff
**
*/A*
** *
** *
/Awenn Wasser auf die fällt A. Bei allen Herausforderungen wäre es gut zu klären, ob \Aes sich um eine Talsohle handelt. Für die dritte Herausforderung sollten 3 Einheiten, die auf eine fallen, Aals geteilt angenommen werden 1.5 / 1.5(die Eingabe ist also wirklich eine einzige rationale Zahl), oder ist es 2 / 1in welchem Fall die 2?
Abeide Seiten 1,5. Es ist Sache
fs