Project Euler 205

Bu Project Euler sorusu çok kısa; 2 adam var biri Peter diğer Colin. Peter’ın elinde 9 tane, yüzlerinde 1, 2, 3 ve 4 yazan piramit şeklinde zar, Colin’in elinde de 6 tane, üzerinde 1, 2, 3, 4, 5 ve 6 yazan kübik zar var. Zarlardaki olasılıkların uniform olduğunu yani her zardaki sayıların olasılıklarının birbirine eşit olduğunu düşünüyoruz. İki arkadaş da ellerindeki tüm zarları atıyorlar. Zarların toplamına bakıldığında Peter’ın Colin’den fazla puan alma olasılığı nedir?

Peter’ın alabileceği puanlar [9, 36], Colin’in alabileceği puanlar ise [6, 36] aralıklarında değişiyor. Eğer her bir oyuncunun hangi puanı hangi olasılıkla aldığını hesaplarsak Peter’ın Colin’i yenme olasılığı da (P(x) Peter’ın x puan alma, C(y) ise Colin’in y puan alma olasılığı olmak üzere)

(1)   \begin{equation*} \sum\limits_{x=9}^{36} P(x) \sum\limits_{y=6}^{x-1} C(y) \end{equation*}

formülüyle hesaplanabilir.

Bunun için önce her bir puanın olasılığını hesaplamak lazım. Peter için 4^9, Colin içinse 6^6 farklı çözüm olduğundan her çözümü tek tek hesaplamak mantıklı değil. Bunun yerine şöyle bir yöntem kullanabiliriz;

Elinde 1 zar bulunduğunu düşünürsek Peter’ın 1, 2, 3, 4 puan alma olasılıkları eşit ve P_1(1) =P_1(2) =P_1(3) =P_1(4) = 0.25 olacaktır. 2. zar atıldığında ise, eski çözümler 0.25 olasılıkla 1, 2, 3 ya da 4 olarak artacaktır. Bu durumda ikinci zar ile k puan kazanma olasılığı P_2(k) = 0.25 (P_1(k-1) + P_1(k-2) + P_1(k-3) + P_1(k-4)) olacaktır. Bu hesabı k yüzlü n zar için yapan ve olasılık dağılımını dönen kod aşağıda:

Bu fonksiyon ile Peter ve Colin’in olasılık dağılımını hesapladıktan sonra bunları kullanarak sonucu bulabiliriz.

(main fonksiyon, işlem tekrarı yapmamak için Colin’in kümülatif dağılımını hesaplıyor).

İyi ki açıldın Project Euler :)