İnsanlara ayrık bir olasılık dağılımı kavramını tanıtmanın klasik bir örneği, fasulye makinesidir . Bu makinenin üstündeki dar bir geçitten düşen büyük miktarda mermer vardır, ardından her bir pimde mermer vuruşlarının pimin soluna veya sağına düşebileceği, pimli sıralara çarptıkları görülmektedir. Son olarak, pimler makinenin altındaki dikey kutularda toplanmaktadır. Bu makinenin basit bir şeması şöyle görünür:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
|_|_|_|_|_|_|
Bu şemada, O
mermerlerin düştüğü yeri gösterir. Her biri ^
, mermerin pimin soluna veya sağına kareye gitme şansının% 50 olduğu bir pimdir. Daha sonra, mermerler, cihazın altındaki kutularda toplanır ve yeterince büyük sayıda mermer için, kutulardaki mermer yığınlarının yüksekliği, ayrı bir binom dağılımına benzer.
Meydan okuma
Bu zorluk için, yukarıdaki gibi diyagramlara göre fasulye makinelerinin sonuçta ortaya çıkan olasılık dağılımını hesaplayacaksınız. Diyagramlar, mermerlerin yandaki alanlara veya mevcut alanın altındaki alanlara doğru geçtiği iki boyutlu bir 'program' olarak yorumlanır. Mermerler makinenin dibine ulaştığında, olasılık dağılımı için sayılır. İlginç olması için, bu diyagramlar sadece basit kaynak ve pimlerden daha fazla alan içerecektir. Örnek bir şema:
| O |
| ^ |
| ^ / |
| ^ | ^ |
| <^- = v |
| ^ ^ ^ ^ ^ |
Ayrıca, şimdi her bir mermerin dönme yönü vardır. Bu yön, bazı alanlar tarafından belirlenir ve mermerin başka hangi alanlarda başka hangi alanda hareket edeceğini belirler.
Aşağıdaki alanlar tanımlanmıştır:
O
: Kaynak. Doğrudan altındaki mermerleri yumurtlar. Bu mermerlerin yönü% 50 sol,% 50 sağdır. Her kaynak aynı miktarda mermer üretir.U
: Lavabo. Bu alana giren tüm mermerler, fasülye makinesinden çıkarılır.: Boş alan. Bu alana bir mermer gelirse, aşağıdaki alana geçecektir.
-
: Kat. Bu alana bir mermer gelirse, geçerli yönüne bağlı olarak sola veya sağdaki alana hareket edecektir.^
: Ayırıcı. Bu alana bir mermer gelirse, sağa ya da ayırıcının solundaki alana doğru hareket edenlerin% 50'sine sahiptir. Bu aynı zamanda mermerin yönünü de belirler.v
: Katılmak. Bu alana bir mermer gelirse, aşağıdaki alana geçecektir./
: Eğimli ped. Bu alana bir mermer gelirse, pedin solundaki alana hareket ederek mermerin yönünü belirleyecektir.\
: Önceki ile aynı, ancak sağa.|
: Reflektör. Bu alana bir mermer gelirse, mermerin yönünü tersine çevirir ve bu ters yöne göre mermeri sağa veya sola doğru hareket ettirir.=
: Cannon. Mermer bu alanda ulaşır, bu mermer olmayan bir alanı saptadığı kadar geçerli yönde soldan sağa veya taşımak olacaktır,
-
ya daO
.<
: Bir öncekiyle aynı, ancak daima yönü ayarlayıp sola doğru hareket edecektir.>
: Önceki ile aynı, ancak sağa.
Şema için aşağıdaki garantiler verilmiştir.
- Her giriş satırının alanlarla tam olarak aynı uzunluğu olacaktır.
- Her satırın en sol ve en sağdaki alanı her zaman a olacaktır
|
. - Diyagram,
\/
veya gibi belirsiz miktarda tekrarlama için mermerlerin makineye sıkışabileceği olası yolları içermeyecektir^^
. - Diyagram sadece yukarıda belirtilen alanları içerecektir.
- Bir veya daha fazla kaynak var
Sonuç
Göreviniz, mermerlerin grafiğin alt kısmından çıktığı olasılık dağılımının 16 satırlık bir ASCII çubuk grafiğini oluşturmak olacak ve ölçeklendirilerek en büyük olasılık tüm 16 karakteri kapsayacak. Yani aşağıdaki problem için:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
Programınız aşağıdaki çözümü üretmelidir (taraftaki borular da dahil olmak üzere girdi programla aynı genişliğe sahip olması gerektiğini unutmayın:
# #
# #
# #
# #
# #
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # # # #
# # # # # #
Örnekler
Aşağıdaki, tüm farklı alan türlerinin işlevselliğini test etmesi gereken bir örnek:
| O O |
| O ^ / <^\\\ |
| ^ > ^ |
| ^ ^ ^ =|
| ^ ^ | ^ <^ O |
| ^ > ^ | ^ O ^> v |
|| ^U ^ | = ^\ |
| ^ ^ ^ ^U ^\ ---^ |
| = ^ ^ = v |
Aşağıdaki çıktıya yol açmalıdır:
#
#
#
#
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
## # # #
## # # # #
# ### # # # #
# # ### # # # #
# # ### # # # #
kurallar
Hem işlevler hem de tam programlar bu zorluk için geçerli cevaplar oluşturmaktadır. Diyagramı yeni satırlarla ayrılmış bir dize olarak alırsınız ve çıktı grafiğini verilen biçimde döndürmeniz gerekir. Varsayılan giriş / çıkış kuralları geçerlidir. Çıktıda izleyen ve önde gelen yeni satırlara izin verilirken, her satır girişle tam olarak aynı genişliğe sahip olmalıdır.
Daha yaratıcı çözümlere izin vermek için, yalnızca programınızın aynı diyagram için zamanın% 90'ından fazlasını doğru sonuç vermesi gerekir. Sonuçta bir olasılık simülasyonu.
puanlama
Bu kod golf , yani bayt cinsinden en düşük puan kazanır.
v
= [space]
?
v
ve [space]
topların etraflarında nasıl etkileşimde bulundukları konusunda farklılıklar gösterir.