Było już pytanie o symulację problemu Monty Hall . Ten jest inny. Użytkownik będzie grać w Monty Hall problem. Twój program będzie pełnił rolę gospodarza. Montybot, jeśli chcesz.
Oto kroki:
- Wybierz (losowo), które z trzech drzwi ukrywa nagrodę.
- Wyświetl wizualny obraz trzech drzwi. Proste
ABC
wystarczy. Lub trzy kwadraty. Lub cokolwiek. - Odbierz dane wejściowe wybierając jedno z drzwi. Może to być kliknięcie myszką wybranych drzwi, wprowadzanie pojedynczej litery (
B
) lub cokolwiek innego. - Otwórz kolejne drzwi. Nie otwierasz wybranych drzwi. Nie otwierasz drzwi, ukrywając główną nagrodę. Które mogą oznaczać nie masz wyboru, czy to może oznaczać, że masz do wyboru dwa. Jeśli masz do wyboru dwa, wybierz jeden losowo. Wskaż wizualnie, że drzwi zostały otwarte i nie kryje się za nimi żadna nagroda. W przypadku wejścia / wyjścia opartego na tekście programu może to być tak proste, jak wyjście
AB0
, aby pokazać, że drzwiC
zostały otwarte. Bądź bardziej pomysłowy. Jeśli wykonujesz program GUI, wybór sposobu wyświetlania zależy od Ciebie. - Zaakceptuj dane wejściowe od użytkownika. Użytkownik może wprowadzić
stick
lubswitch
(lub, w przypadku programu GUI, kliknąć przyciski lub użyć wejścia select lub cokolwiek innego). Jeśli użytkownik wprowadzi cokolwiek innego niżstick
lubswitch
, implementacja jest niezdefiniowana. Rób co chcesz. - Wydrukuj tekst
You won!
lubYou lost
. - Zakończyć program.
Zasady:
- Kiedy musisz wybrać coś losowo , nie martw się przypadkowością kryptograficzną. Każda
rand()
funkcja zadziała. - Program nie może oszukiwać. Nagroda musi być na miejscu przed rozpoczęciem gry. To znaczy, że kroki należy wykonać w podanej kolejności: Najpierw wybierz drzwi, za którymi ukryjesz swoją nagrodę, a następnie poproś gracza o wybranie. Wybór drzwi do otwarcia w kroku 4 musi nastąpić w kroku 4: nie jest wcześniej wybierany.
- Dane wyjściowe w kroku 6 muszą być uczciwe.
- To jest kod golfowy. Najkrótszy kod wygrywa.
Odpowiedzi:
APL, 77
Potrzeby
⎕IO←0
. Testowane na Dyalog.Wyjaśnienie
Przykłady
źródło
≠
źródło, które mutuje się=
w wyjaśnienie.Python, 157
Przykład:
źródło
PowerShell:
192174Zmiany w stosunku do oryginału:
Kod do gry w golfa
Kod bez golfa z komentarzami
źródło
JavaScript,
221197Używa dwóch wywołań funkcji Date.now () dla losowości, z monitem pomiędzy nimi, aby zagwarantować opóźnienie. Dane wejściowe użytkownika są indeksem 0 (reguła mówi „cokolwiek”). Poniższy alert mówi, które drzwi zostały otwarte. Oto nieco dłuższa wersja, która daje odpowiedź, zanim użytkownik wybierze, aby sprawdzić, czy nie oszukuje:
Fiddle: http://jsfiddle.net/acbabis/9J2kP/
EDYCJA: Dzięki dave
źródło
(function(q,r,s,t,u,v){f='ABC';d=[0,1,2];b=q%3;a=r(f);d.splice(a,1);(a==b)?((r(f[d[q%2]])==t)?s(u):s(v)):(r(f[d[(d[0]==b)+0]])!=t)?s(u):s(v)})(Date.now(),prompt,alert,'stick','You won!','You lost')
"I can't pass Date.now() ... I can, however, pass Date.now"
???date.now
przekazuje funkcję,date.now()
przekazuje wynik funkcjiPHP> = 5,4,
195192Wynik:
źródło