Ci z was, którzy lubią Numberphile, znają dr Jamesa Grime'a, który opisał nieprzechodnie grę w kości na swoim kanale .
Gra składa się z trzech kostek o 6 twarzach:
- Die 1: 3,3,3,3,3,6
- Die 2: 2,2,2,5,5,5
- Die 3: 1,4,4,4,4,4
Każdy z dwóch graczy wybiera kostkę do użycia. Rzucają je, a wyższa kostka wygrywa, najlepiej z czegokolwiek.
Prawdopodobnie, kostka 1 bije kostkę 2 z szansą> 50%. Podobnie, 2 uderzenia umierają 3, a co ciekawe, 3 uderzenia umierają 1.
Napisz podejmowania programu 1
, 2
lub 3
jako wejście. Wskazuje kostkę wybraną przez użytkownika. Następnie program wybiera kostkę, która pokonałaby użytkownika i wyświetlał wyniki 21 rzutów, a „ Computer/User wins with x points
”
Zasady
- Code-golf, głosuje jako remis
- Musisz użyć RNG (lub polubień), aby faktycznie symulować rzuty kostką.
- Nie jestem zbyt surowy w kwestii formatu wyjściowego. Jest w porządku, o ile pokazujesz kości, w jakiś sposób rozdzielasz 21 rzutów (w sposób odmienny od tego, w jaki sposób dzielisz kości w tym samym rzucie) i wypisujesz powyższe zdanie.
- Dane wejściowe mogą być standardowe, argument linii poleceń, z ekranu itp.
Przykład
Wejście
1
Wynik
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 6
1 3
4 3
4 3
1 3
4 3
1 3
4 3
4 3
4 3
4 3
4 6
Computer wins with 16 points
Tutaj użytkownik wybiera kostkę 1, a jego rzuty są pokazane w prawej kolumnie. Program wybiera kostkę 3 i bije go.
|Z-21×X
, nie zmieniając liczbyR - 228
Przykładowy przebieg:
źródło
summary.factor
ztable
, oszczędzając 9 znaków.Mathematica
208172166159Dodano spacje dla przejrzystości
źródło
Ruby 1.8, 165
getc
pobiera wartość ascii wejścia (tylko Ruby 1.8), co na szczęście jest przystające modulo 3 do jego wartości całkowitej.s
zaczyna się od 21, więcs.times{code}
wykonacode
21 razy i zwróci 21. Przy każdej iteracji pętla albo dodaje, albo odejmuje 1 od s, w zależności od tego, kto wygra, więc możemy zobaczyć, kto wygrał, sprawdzając, czys
skończył poniżej 21. , ale potrzebuję niezdarnego wyrażenia,[s/=2,21-s].max
aby wyodrębnić rzeczywistą liczbę punktów. Od dawna chciałem robić arytmetykę z wartością zwracaną<=>
, więc i tak jestem szczęśliwy.źródło
Mathematica
234247Kod
Stosowanie
Wyjaśnienie
n
jest liczbą 1, 2 lub 3, która odpowiada kości gracza. Ponieważ n określa również (ale nie równa się) kość komputera, możemy wygenerować wszystkie możliwe rzuty kostką, gdy n = 1, n = 2, n = 3. Możemy również określić ich odpowiednie prawdopodobieństwa.Sprawdź dane zaraz po
RandomChoice
:Jeśli gracz losuje kostkę 1, jedynymi możliwymi wynikami są następujące 4 pary
{{3, 1}, {3, 4}, {6, 1}, {6, 4}}
Odpowiednie prawdopodobieństwa tych par są następujące
{5, 25, 1, 5}/36
, to jest,{5/36, 25/36, 1/36, 5/36}
RandomChoice[<data>, 21]
wyprowadza 21 rzutów dwóch kości.źródło
DO,
205191Odczytuje wybór użytkownika ze standardowego wejścia.
źródło
for(c=51-getchar(p=0);
,printf("%ser wins
), zmienić kolejność wyraz wr
zacząć(
i oszczędność miejsca.(c+1)%3
->-~c%3
, ustawp
statyczny (inicjowany na 0), usuń{}
pofor
(;
->,
w nich), użyjp<11?:
dwa razy wprintf
środku zamiast przypisywaniap,q
.s,q
w pętliprintf
, ap
następnie zwiększać , oszczędzając w ten sposób nawiasy. Zmień takżec
przypisanie do użycia%3
lub%7
, podając inną kolejność 0,1,2.Czynnik
Zawiera: 388
Bez: 300
Tak, Factor nie jest tak naprawdę językiem używanym podczas gry w golfa, ale jest fajny.
źródło
Python 182
źródło
R 206
źródło