Beanマシンまたはplinko / パチンコゲームに似たメカニズムのこのASCIIバージョンを検討してください。
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
O
落ちるボールです。
- にヒットする
^
と、50〜50の確率で左または右に移動します。 - にヒットすると
/
、常に左に移動します。 - にヒットすると
\
、常に正しくなります。
最終的に、ボールU
は下部の番号付きトラフのいずれかに落ちます。問題は、それが各谷で終わる確率は何ですか?
この特定のケースでは、確率は0.0
、0.1875
、0.5625
、0.125
、および0.125
、それぞれトラフ5を介して1。
ここでは3つの谷の代わり5.確率があるとのもう一つの例だ0.5
、0.5
とは0.0
:
O
/
^ ^
U U U
1 2 3
この課題では、この問題を、任意の方法で設定された任意の数のレイヤーを持つメカニズムに一般化します。
チャレンジ
メカニズムのピラミッド構造のASCII表現を取り込むプログラムまたは関数を作成します。(stdin /コマンドライン/関数引数を使用して入力します。)
あなたはそれが適切な形にそれを置くスペースで入ってくると仮定するかもしれません、例えば
^
\ ^
^ ^ \
\ ^ / ^
または、スペースがまったくない状態であると仮定することもできます。たとえば、
^
\^
^^\
\^/^
(必要に応じて、末尾の改行および/または末尾のスペースの一貫したパターンがあると仮定できます。)
入力ピラミッド構造には、ゼロを含む任意の数のレベル(ライン)を含めることができます。各レベルは、一以上有する^
、/
または\
最後のではなく、そしてあるlevels + 1
(入力の一部ではない)底部の溝は
プログラム/機能は、ボールが各トラフに着地する確率のリストを印刷/返送する必要があります(左端のトラフから右端のトラフの順)。これらは、印刷時に、少なくとも3小数点以下の桁数を有する浮動小数点値をすべきである(余分なゼロまたは小数点が必要とされない。1
罰金である1.000
、.5
のために微細である0.500
など)。関数を作成した場合、値を出力するか、フロートのリスト/配列を返すことができます。
妥当な印刷リスト形式であれば問題ありません。例えば0.5 0.5 0.0
、[0.5 0.5 0.0]
、[0.5, 0.5, 0.0]
、{0.5, 0.5, 0.0}
、または0.5\n0.5\n0.0
すべて大丈夫だろう。
例
0レベル:(つまらないものになりますU
)
入力:[no input/empty string given]
出力:1.0
1レベル:
入力:^
出力:0.5 0.5
入力:/
出力:1.0 0.0
入力:\
出力:0.0 1.0
2レベル:(上記の2番目の例)
入力:
/
^ ^
出力: 0.5 0.5 0.0
3つのレベル:
入力:
^
^ ^
^ ^ ^
出力: 0.125 0.375 0.375 0.125
入力:
\
/ \
/ / \
出力: 0.0 0.0 0.0 1.0
4レベル:(上記の最初の例)
入力:
^
\ ^
^ ^ \
\ ^ / ^
出力: 0.0 0.1875 0.5625 0.125 0.125
7レベル:
入力:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
出力: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
得点
バイト単位の最短回答が優先されます。Tiebreakerは以前の投稿です。