Bir fasulye makinesine veya plinko / pachinko oyununa benzer bir mekanizmanın bu ASCII sürümünü düşünün :
O
^
\ ^
^ ^ \
\ ^ / ^
U U U U U
1 2 3 4 5
OAşağı düşen bir top.
- Bir vuruş yaptığında
^, sola ya da sağa gitme şansı 50-50 olur. - Bire vurduğunda
/her zaman sola döner. - Bir vuruş yaptığında
\, her zaman doğru gider.
Top nihayetinde alttaki numaralı Uoluklardan birine düşer . Asıl soru, her kanalda ortaya çıkma olasılığı nedir?
Bu özel durumda, olasılıklar vardır 0.0, 0.1875, 0.5625, 0.125, ve 0.125, sırası ile 5 arasındaki olukları 1.
İşte 3 olukları yerine 5. olasılıkları vardır ile başka bir örnek 0.5, 0.5ve 0.0:
O
/
^ ^
U U U
1 2 3
Bu mücadelede, bu problemi, herhangi bir şekilde kurulmuş herhangi bir sayıda katmana sahip bir mekanizmaya yaygınlaştıracağız.
Meydan okuma
Mekanizmanın piramit yapısının ASCII temsilini alan bir program veya işlev yazın. (Stdin / komut satırı / işlev arg. İle giriş)
Ya uygun bir şekilde yerleştiren boşluklarla geldiğini varsayabilirsin, örneğin
^
\ ^
^ ^ \
\ ^ / ^
Veya hiç boşluk bırakmadığını, örneğin
^
\^
^^\
\^/^
(İsterseniz, takip eden bir yeni satır ve / veya bazı takip eden boşluk alanlarının olduğunu varsayabilirsiniz.)
Giriş piramidi yapısı sıfır dahil herhangi bir sayıda seviyeye (aka çizgileri) sahip olabilir. Her seviyede bir daha vardır ^, /ya da \son daha ve orada levels + 1(giriş parçası değildir) altındaki olukları.
Programlamanız / işlevin, topun her bir çukura girme olasılıklarının listesini yazdırması / iade etmesi gerekir (en soldan en sağa veya en soldaki sırayla). Bunlar, basıldığında en az 3 ondalık basamağa sahip kayan nokta değerleri olmalıdır (gereksiz sıfırlar ya da ondalık basamağa ihtiyaç duyulmaz; 1bunun için para cezası iyidir 1.000, .5bunun için iyidir 0.500, vb.). Bir işlev yazdıysanız, değerleri yazdırabilir veya yüzenlerin bir listesini / dizisini döndürebilirsiniz.
Herhangi bir makul basılı liste formatı iyidir. örneğin 0.5 0.5 0.0, [0.5 0.5 0.0], [0.5, 0.5, 0.0], {0.5, 0.5, 0.0}, veya 0.5\n0.5\n0.0tüm düzeleceğine.
Örnekler
0 Seviyeler: (önemsiz bir seviyeye kadar kaynar U)
Giriş: [no input/empty string given]
Çıkış:1.0
1 Seviye:
Giriş: ^
Çıkış:0.5 0.5
Giriş: /
Çıkış:1.0 0.0
Giriş: \
Çıkış:0.0 1.0
2 Seviye: (yukarıdaki ikinci örnek)
Giriş:
/
^ ^
Çıktı: 0.5 0.5 0.0
3 Seviye:
Giriş:
^
^ ^
^ ^ ^
Çıktı: 0.125 0.375 0.375 0.125
Giriş:
\
/ \
/ / \
Çıktı: 0.0 0.0 0.0 1.0
4 Seviye: (yukarıdaki ilk örnek)
Giriş:
^
\ ^
^ ^ \
\ ^ / ^
Çıktı: 0.0 0.1875 0.5625 0.125 0.125
7 Seviye:
Giriş:
^
/ ^
^ ^ /
/ \ / \
^ ^ / ^ \
^ \ ^ \ / ^
\ ^ ^ ^ \ ^ /
Çıktı: 0.0 0.09375 0.28125 0.4375 0.1875 0.0 0.0 0.0
puanlama
Bayt cinsinden en kısa cevap kazanır. Tiebreaker daha önce yayınlandı.