Intro
Betrachten Sie ein Raster der Zeichen f A\/
wie
f f f
A
A / \
\ / A
A \/
/
\/
woher:
f
stellt einen Wasserhahn dar, der einen Wasserstrahl nach unten gießtA
teilt 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 f
solchen, 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.
\A
undA/
undAA
sind 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
f
fließt durch ihn hindurch. - Die Wasserhähne können überall sein, nicht nur in der obersten Reihe.
A
teilt immer genau die Hälfte der Wassermenge auf.
Hinweis: Dinge wie /A
und //
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 f
Strom ergießt sich, trifft auf /
und verschiebt sich nach links. Der rechte f
Strom ergießt sich, trifft den A
, die Hälfte geht nach rechts und die Hälfte geht nach links zwischen dem A
und dem /
.
z.B
ff
**
*/A*
** *
** *
/A
wenn Wasser auf die fällt A
. Bei allen Herausforderungen wäre es gut zu klären, ob \A
es sich um eine Talsohle handelt. Für die dritte Herausforderung sollten 3 Einheiten, die auf eine fallen, A
als geteilt angenommen werden 1.5 / 1.5
(die Eingabe ist also wirklich eine einzige rationale Zahl), oder ist es 2 / 1
in welchem Fall die 2
?
A
beide Seiten 1,5. Es ist Sache
f
s