Magiczny pojedynek – rozwiązanie zagadki

https://xpil.eu/i32

Tydzień temu postawiłem przed Czytelnikiem następujący problem: czy lepiej wybrać łuk, który trafia zawsze w ósemkę, czy taki, który trafia w 5, 9 lub 10 (z jednakowym prawdopodobieństwem) przy założeniu, że każdy z zawodników oddaje po trzy strzały tak długo aż któryś zdobędzie przewagę.

No więc tak: na dzień dobry wychodzi na to, że wsioryba który łuk wybierzemy, bo obydwa w trzech strzałach mają wartość oczekiwaną 24. Łuk 8-8-8 ma tę wartość gwarantowaną, a łuk 5-9-10 - średnią (bo 5+9+10=24). Skoro tak, to mogę wybrać którykolwiek łuk i moje szanse pozostaną 50/50, zgadza się?

A no nie zgadza się. Zerknijmy na rozkład poszczególnych możliwych wyników z łukiem 5-9-10:

  1. 10+10+10=30
  2. 10+10+9=29 (trzy takie kombinacje: (10,10,9), (10,9,10), (9,10,10))
  3. 10+10+5=25 (też x3)
  4. 10+9+9=28 (x3)
  5. 10+9+5=24 (x6)
  6. 10+5+5=20 (x3)
  7. 9+9+9=27 (x1)
  8. 9+9+5=23 (x3)
  9. 9+5+5=19 (x3)
  10. 5+5+5=15 (x1)

Policzmy sobie teraz kombinacje wygrywające: jest ich 11 (numery 1, 2, 3, 4 i 7 na liście powyżej)

A przegrywające? To numery 6, 8, 9 i 10 z powyższej listy, razem 10 kombinacji. A więc rozkład jest niesymetryczny: odrobinę faworyzuje wygrane.

Ponieważ każdy strzał z łuku ma wynik niezależny od pozostałych, każda z wymienionych wyżej kombinacji jest jednakowo prawdopodobna (z uwzględnieniem ich krotności rzecz jasna). Sześć remisów można pominąć w rozważaniach bo prowadzą one do kolejnej serii trzech strzałów.

Czyli wygramy średnio w 11 przypadkach na 21, a przegramy w 10/21.

11/21≃0.524 czyli poprawna odpowiedź to 52.4%. Nie za dużo, ale lepszy rydz niż nic.

Dla niedowiarków możemy też przeprowadzić małą symulację. Oto kod, który symuluje 10 milionów takich pojedynków i wyświetla na koniec proporcję wygranych do łącznej liczby gier:

#!/usr/bin/env pypy3

from random import randint as ri

ileProb = 10000000
ileWygranych = 0
tarcza = [5, 9, 10]
for n in range(ileProb):
    while True:
        wynik = sum([tarcza[ri(0, 2)], tarcza[ri(0, 2)], tarcza[ri(0, 2)]])
        if(wynik > 24):
            ileWygranych += 1
            break
        elif(wynik < 24):
            break

print(ileWygranych/ileProb)

Na wyjściu dostaję zawsze liczbę w okolicach 0.5236 co po zaokrągleniu do trzech miejsc po przecinku i przemnożeniu przez 100 daje 52.4%.

A jak Wam poszło? Płodnie! Może niezbyt skutecznie, ale płodnie. Siedem osób, dziesięć zgłoszeń. Jak nigdy.


1

Jako pierwszy do zabawy przystąpił Rafał, który rozpykał zadanie w zasadzie identycznie jak ja tu powyżej, czyli najpierw dotarł do wyrażenia 11/21, a potem zasymulował to prostą pętelką w Powershellu (o dziwo, nawet ilość powtórzeń pętli przyjął 10 milionów, cóż za zbieg okoliczności). Tym samym przyznaję Rafałowi WMZDPSWOZ (Wielki Medal Z Dowolnie Przez Siebie Wybranej Odmiany Ziemniaka). Niestety z powodu kowidu medalu nie mogę wysłać, proszę go sobie wystrugać we własnym zakresie. Gratulacje!


2

Chwilę potem odezwał się Cichy Fragles, który poprzestał na wyliczeniach teoretycznych - jak najbardziej poprawnych:

Trzy strzały z trzema możliwymi wynikami dają 27 kombinacji, z czego 11 jest wygranych (tzn. daje 25 lub więcej punktów), 6 remisowych (24 punkty) i 10 przegranych. Pomijając remisy, mamy 11/21 = 52,38% szans na zwycięstwo.

Cichy Fragles, grudzień 2021

3

Rzast nadesłał rozwiązanie, z którego wynika, że łuk 5-9-10 jest lepszy, ponieważ daje aż 40.7% na wygraną, podczas gdy łuk 8-8-8 tylko 37%. Odpowiedź tylko w połowie poprawna (wybór lepszego łuku) - procenty powinny się sumować do 100% (albo inaczej: lepszy łuk powinien dawać ponad 50% szans zwycięstwa). Remis w pojedynczej serii trzech strzałów prowadzi do kolejnej serii, więc prędzej czy później nastąpi rozstrzygnięcie. Nie zaliczam.


4

Podobna sytuacja u Waldka (nawiasem mówiąc naczelnego sprawcy tej zagadki) - wybrał prawidłowy łuk i nawet procenty mu się sumowały jak trzeba, ale jakimś cudem wyszło mu 55.6% (a dokładniej 5/9) szans na wygraną. Nie zaliczam (a szkoda - Waldek jest jednym z głównych rozwiązywaczy lokalnych zagadek).


5

Kolejnym rozwiązującym był Butter, który rozminął się z poprawną odpowiedzią o włos: 52% różni się od 52.4% tylko zaokrągleniem, które wzięło się prawdopodobnie ze zbyt małej liczby prób w kodzie symulującym proces (10 tysięcy). Nawiasem mówiąc przy analizowaniu odpowiedzi Buttera spędziłem najwięcej czasu, bo z jakiegoś powodu jego skrypt w Pythonie przyszedł w postaci jednej długiej linii i chwilę mi zajęło połamanie go w odpowiednie bloki.


6

Nie do końca zadowolony z poprzedniego wyniku, Butter podjął drugą próbę - tym razem już porządnie błędną. Coś tam kombinował w Pythonie z permutacjami, ale nie do końca w tę stronę co trzeba. Chyba się dogadał za kulisami z Waldkiem, bo wyszło mu tym razem 55.6%. Nie zaliczam.


7

Tywan dostaje Honorową Wzmiankę za uczestnictwo. Nie podał odpowiedzi, ale przynajmniej uczciwie napisał, że nie ma pojęcia jak się za to zabrać. Szacun!

Wybieram łuk dający jakąkolwiek szansę na wynik większy niż 24 w trzech strzałach (taka jest wartość oczekiwana dla obu łuków), spodziewając się po drugim uczestniku finału skuteczności bliższej 10,10,10 niż 1,1,1. Jak podejść do obliczeń - nie mam pomysłu

Tywan, grudzień A.D. 2021

8

Dwa dni później postanowił zrehabilitować się Waldek. Niestety - podobnie jak u Buttera - drugie podejście też okazało się błędne. Tym razem Waldkowi wyszły cyferki identyczne jak u Rzasta czyli 37% i 41% (plus 22% dla remisów, które nijak się nie mają do poprawnego wyniku, ale przynajmniej suma wychodzi 100%).


9

W drugi dzień Świąt swoje rozwiązanie nadesłał Rozie - w zasadzie identyczne z moim, czyli skrypt w Pythonie, 10 milionów prób i wynik 52.4%. Zaliczam. Swoją drogą to kolejny Czytelnik, który wykombinował, że akurat 10 milionów prób da wynik z dokładnością do jednego miejsca po przecinku. Interesujące.


10

W drugim swoim podejściu Tywan jednak rozpracował zagadkę i to całkiem bez symulacji:

Wygrywających kombinacji 5-9-10 jest 11, dających taki sam wynik 24 punktów jest 6, przegrywających 10. Prawdopodobieństwo wygranej to 11/21. W pierwszym podejściu nie dotarło do mnie że dokładnie te 2 łuki uczestniczą w turnieju.

Tywan, grudzień 2021

https://xpil.eu/i32

5 komentarzy

  1. Wstydliwa porażka i to na własne życzenie… Jak z tym żyć?

    Jeśli Gospodarz pozwoli, to jednak gdzieś tam w Kosmosie odbywa się równie magiczny pojedynek Człowiek kontra Wszech-Zagadka! Webb leci i powoli rozwija się:
    https://jwst.nasa.gov/content/webbLaunch/whereIsWebb.html?units=metric

    Od paru dni zmagam się z kosmicznym zadaniem: próbuję policzyć prędkość początkową Webb’a. Dla jasności, leci on z orbity Ziemi do punktu Lagrange’a L2 jedynie siłą początkowego rozpędu. Po drodze nie będzie hamował (brak silników stopu). Ma dotrzeć na miejsce zwalniając grawitacyjnie i stanąć. Ot, tak. No, nie do końca, będzie tam krążył po orbicie wokół… niczego, tzn. wokół L2, ale dla rachunków to nie ma znaczenia.
    Jest kilka wersji obliczeń. Najprostsza, wyidealizowana to start z Ziemi prosto do celu, z uwzględnieniem jedynie grawitacji Ziemi i Słońca. Druga wprowadza wpływ Księżyca (trzeba sprawdzić jego położenie w chwili startu), a trzecia – tak jak było w rzeczywistości – to start z orbity (inna bajka). Czwarta dodatkowo uwzględnia zużycie paliwa i odrzucanie członów rakiety.
    Jestem przy drugiej wersji – piękne obliczenia. Księżyc rządzi! Jeśli ktoś nie ma planów na Sylwestra, to jest przyjemna alternatywa spędzenia czasu. 🙂

    Dla zainteresowanych link do relacji (start rakiety w 1:22:00):
    https://www.youtube.com/watch?v=7nT7JGZMbtM&t=4923s
    Są tam pokazane wszystkie parametry lotu.

    1. Moje najbardziej zaawansowane plany w tym temacie obejmują omówienie punktów L1 do L5. Natomiast wyliczenia trajektorii to już dla mnie za wysokie progi…

  2. Ilość prób to kompromis między dokładnością pomiaru (im więcej, tym dokładniej) i czasem oczekiwania. Dla zwykłego Pythona 3 Twój skrypt wykonuje się u mnie ok. 30 sekund. Pypy to ~1,5 sekundy i tu pewnie dałbym rząd wielkości więcej iteracji.

  3. Ad 3.
    Pytaniem było:
    Pytanie: który łuk powinieneś wybrać, aby poprawić swoje szanse na wygraną w jutrzejszym finale? Jeżeli go wybierzesz, jaką (procentowo) będziesz miał szansę na wygraną?

    Wskazałem łuk lepsiejszy. Pokazałem, że jest lepszy (40.7% vs 37%) w konkretnym pojedynku. To, że się nie sumuje do 100% wynika z nieuwzględnionych % od remisów (vide odp. 8).
    A jeżeli mag był złośliwy i wynik trzech strzałów to zawsze jest 5,9,10 z dokładnością do permutacji (bo to się mieści w założeniach zadania)? I oni wciąż tam strzelają remisy? I co wtedy? Nie ma tam nic o innym warunku zakończenia pojedynku, jak tylko wygrana jednego z nich…

    1. “To, że się nie sumuje do 100% wynika z nieuwzględnionych % od remisów” – ale tu nie ma remisów. “Remis” w pojedynczej rundzie prowadzi do kolejnej rundy, a więc prędzej czy później ktoś wygra. Stąd też szanse na zwycięstwo / porażkę powinny sumować się do 100%.

      “I oni wciąż tam strzelają remisy?” – tak samo może się zdarzyć wyrzucenie 1000 orłów pod rząd…

Leave a Comment

Komentarze mile widziane.

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.