Betrachten Sie diese ASCII-Version eines Mechanismus, der einer Bohnenmaschine oder einem Plinko / Pachinko- Spiel ähnelt :
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
Das O
ist ein Ball, der runterfällt.
- Wenn es auf a trifft
^
, besteht eine 50: 50-Chance, dass es nach links oder rechts geht. - Wenn es ein trifft
/
, geht es immer nach links. - Wenn es auf ein trifft
\
, geht es immer richtig.
Der Ball fällt schließlich in einen der nummerierten U
Tröge am Boden. Die Frage ist, wie hoch die Wahrscheinlichkeit ist, dass es in jedem Trog landet.
Für diesen speziellen Fall sind die Wahrscheinlichkeiten sind 0.0
, 0.1875
, 0.5625
, 0.125
, und 0.125
, für Tröge 1 bis 5 sind.
Hier ist ein weiteres Beispiel mit 3 Mulden statt 5. Die Wahrscheinlichkeiten sind 0.5
, 0.5
und 0.0
:
O
/
^ ^
U U U
1 2 3
In dieser Herausforderung werden wir dieses Problem auf einen Mechanismus mit einer beliebigen Anzahl von Ebenen verallgemeinern, die auf eine beliebige Weise eingerichtet sind.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die die ASCII-Darstellung der Pyramidenstruktur des Mechanismus übernimmt. (Eingabe über stdin / command line / function arg.)
Sie können entweder davon ausgehen, dass es mit Leerzeichen kommt, die es in die richtige Form bringen, z
^
\ ^
^ ^ \
\ ^ / ^
Oder Sie können davon ausgehen, dass es überhaupt keine Leerzeichen enthält, z
^
\^
^^\
\^/^
(Falls gewünscht, können Sie davon ausgehen, dass eine nachgestellte Zeile und / oder ein konsistentes Muster von nachgestellten Leerzeichen vorhanden ist.)
Die Struktur der Eingabepyramide kann eine beliebige Anzahl von Ebenen (auch als Linien bezeichnet) aufweisen, einschließlich Null. Jede Ebene hat ein weiteres ^
, /
oder \
als die letzte, und es gibt levels + 1
Mulden am Boden (die nicht Teil des Eingangs sind).
Sie müssen die Liste der Wahrscheinlichkeiten drucken / zurückgeben, mit denen der Ball in jeder der Mulden landet (in der Reihenfolge von der linken zur rechten Mulde). Dies sollten Gleitkommawerte sein, die beim Drucken mindestens 3 Dezimalstellen haben (überflüssige Nullen oder Dezimalstellen sind nicht erforderlich; 1
ist in Ordnung für 1.000
, .5
ist in Ordnung für 0.500
usw.). Wenn Sie eine Funktion geschrieben haben, können Sie die Werte drucken oder eine Liste / ein Array der Floats zurückgeben.
Jedes vernünftige gedruckte Listenformat ist in Ordnung. zB 0.5 0.5 0.0
, [0.5 0.5 0.0]
, [0.5, 0.5, 0.0]
, {0.5, 0.5, 0.0}
, oder 0.5\n0.5\n0.0
alles wäre in Ordnung.
Beispiele
0 Levels: (auf ein Trivial reduziert U
)
Eingabe: [no input/empty string given]
Ausgabe:1.0
1 Stufe:
Eingabe: ^
Ausgabe:0.5 0.5
Eingabe: /
Ausgabe:1.0 0.0
Eingabe: \
Ausgabe:0.0 1.0
2 Ebenen: (zweites Beispiel oben)
Eingang:
/
^ ^
Ausgabe: 0.5 0.5 0.0
3 Ebenen:
Eingang:
^
^ ^
^ ^ ^
Ausgabe: 0.125 0.375 0.375 0.125
Eingang:
\
/ \
/ / \
Ausgabe: 0.0 0.0 0.0 1.0
4 Ebenen: (erstes Beispiel oben)
Eingang:
^
\ ^
^ ^ \
\ ^ / ^
Ausgabe: 0.0 0.1875 0.5625 0.125 0.125
7 Stufen:
Eingang:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
Ausgabe: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
Wertung
Die kürzeste Antwort in Bytes gewinnt. Tiebreaker ist früherer Beitrag.