W łamigłówce ze starej mojej książki zdefiniowana jest gra, w której dwóch graczy wybiera sekwencje rzutów monetą, które według nich pojawią się jako pierwsze, gdy moneta zostanie wielokrotnie odwrócona. (To było rzeczywiście dziwne, a nawet rzuty kostką, ale ten mały szczegół nie ma znaczenia pod względem równoważności problemu.)
Należy zauważyć, że jeśli gracz 1 wybierze, TTT
a gracz 2 wybierze HTT
, ten gracz 2 ma szansę wygranej 7/8, ponieważ jedyną możliwą drogą TTT
może być HTT
to, że wszystkie trzy pierwsze rzuty są remisem.
Twoim zadaniem jest stworzenie programu lub funkcji, która wydedukuje prawdopodobieństwo, że jedna z dwóch wybranych sekwencji pojawi się pierwsza. Twój program pobierze dwa wiersze danych wejściowych (lub dwa ciągi jako argumenty), z których każdy reprezentuje sekwencję o długości 10 lub mniejszej:
HTT
TTT
Podaj prawdopodobieństwo, że pierwszy gracz wygra, w postaci ułamkowej lub dziesiętnej:
7/8
0.875
Wygrywa najkrótszy kod do wykonania tego w dowolnym języku.
źródło
Odpowiedzi:
Python 3 (
139136134132126115143)Używa algorytmu Conwaya, jak opisano tutaj . Obsługuje wszystkie pary sekwencji, o ile pierwsza nie jest końcowym podsekwencją drugiej (zgodnie z instrukcjami).
Dzięki xnor za zgolenie 6 bajtów. Dzięki Zgarb za wykrycie błędu z podsekwencjami.
źródło
"HTT"
i"TTT"
,o
ma wartość-1
i dzieli go0
.2**i
się<<i
, a prawdopodobieństwo wyjścia może być zapisana jako1/(1/o + 1)
, w którym można umieścić Odwrotnośćo
bezpośrednio.HTH
iT
, mimo że pierwszy gracz nie może wygrać. Druga odpowiedź ma ten sam problem.CJam,
44 3836 bajtówKorzystanie z tego samego algorytmu Conwaya, jak tutaj .
Dane wejściowe to dwie odrębne sekwencje w dwóch wierszach. Dane wyjściowe to prawdopodobieństwo pierwszego wygrania w drugim. Wejścia nie muszą być tej samej długości
Używam wzoru na wygraną po kursie (
p
) dla pierwszego gracza A asNastępnie prawdopodobieństwo definiuje się jako
który po uproszczeniu staje się
i po pewnym uproszczeniu staje się
Przykładowe dane wejściowe:
Wynik:
Wypróbuj online tutaj
źródło
HTH
iT
, mimo że pierwszy gracz nie może wygrać. Druga odpowiedź ma ten sam problem.Lua
211 190184Również używając algorytmu Conwaya. To wciąż nowość w Lua, więc na pewno można w nią grać w golfa.
Nie golfił
Pierwsza wersja
źródło