Dziś w końcu opublikuję poprawne rozwiązanie zagadki, którą zadałem Czytelnikom w połowie marca. Zagadka w pierwotnym brzmieniu zawierała błąd, dlatego w połowie kwietnia opublikowałem erratę. Na zagadkę oryginalną nikt nie zareagował, natomiast po erracie pojawił się jeden odważny Czytelnik (Krzysztof), który wziął się z nią za bary i po kilku drobnych podpowiedziach z mojej strony uporał się z nią w sposób doświadczalny.
Przypomnę, że w zagadce chodzi o ustalenie średniej oczekiwanej wygranej w grze polegającej na rzucaniu stuścienną kostką dopóki, dopóty w kolejnym rzucie wypada ilość oczek nie mniejsza, niż w rzucie poprzednim. Przed każdym rzutem grający dostaje dolara.
Prawidłowa odpowiedź brzmi: e.
Ale nie takie "eeee...", jakie wydaję na widok dowodu Wilesa Wielkiego Twierdzenia Fermata, tylko takie normalne, matematyczne e, czyli podstawa logarytmu naturalnego, równa w przybliżeniu 2.718281828...
Obiecuję wkrótce opublikować rozwiązanie stricte matematyczne (albo "analityczne", o ile ktoś się nie boi używać słów zaczynających się przedrostkiem "anal"), dziś jednak - zainspirowany komentarzami Krzysztofa - publikuję rozwiązanie eksperymentalne.
Przy okazji odświeżę daaaaaawno już nie rozwijaną kategorię "Pchełki VBA".
Napiszemy sobie najpierw prościutką funkcję użytkownika, która przeprowadzi jedną grę, używając kostki o zadanej ilości ścianek:
Public Function graj(scianki)
Dim wynik As Integer
wynik = 1
Dim poprz As Integer, nast As Integer
poprz = Int(scianki * Rnd + 1)
nast = poprz
Do While nast >= poprz
nast = Int(scianki * Rnd + 1)
wynik = wynik + 1
If poprz < nast Then poprz = nast
Loop
graj = wynik
End Function
Następnie przechodzimy do arkusza i w komórce A1 wpisujemy formułę:
=graj(100)
a potem kopiujemy ją w dół, daleeeeeko, daleko. Czym dalej, tym lepiej.
Na koniec zaznaczamy całą kolumnę A i z paska stanu odczytujemy wartość średnią.
Mi wyszło 2.73142 za pierwszym podejściem, 2.70926 za drugim oraz 2.72037 za trzecim. Za każdym razem symulowałem 900000 gier i czekałem na przeliczenie arkusza około trzech minut.
Jak widać wszystkie trzy wyniki oscylują wokół ww. e, chociaż pewnie do większej dokładności musiałbym zwiększyć ilość gier do wartości przekraczającej nie tyle możliwości Excela, co moją cierpliwość.
Jeśli natomiast chodzi o podejście teoretyczne, to dziś tylko uszczknę rąbka tajemnicy, że należy zacząć od dupy strony, czyli od prawdopodobieństwa, że w pierwszym rzucie wypadnie 100, oraz oczekiwanej wartości wygranej w takim przypadku. Potem 99, potem 98... po paru krokach da się zaobserwować pewien schemat obliczeniowy, który da w wyniku zaskakująco prostą formułę.
Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]
Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.