Craps to dość prosta gra w kości, często grana w kasynach. Nawet jeśli nie jesteś hazardzistą (a ja nie jestem), wciąż jest to dość interesująca gra. Oto zasady:
Na początku gry w Craps jest tak zwana runda come-out . Gracz rzuca dwoma k6 (sześciościenna kość) i dodaje dwa rzuty. Jeśli wynik to 7 lub 11, osoba automatycznie wygrywa (jest to znane jako naturalne ). Jeśli wynik wynosi 2, 3 lub 12, osoba automatycznie przegrywa (to się nazywa wyniszczenie ). W przeciwnym razie, wynik jest ustawiony jako punkt za punkt rundzie.
Następnie rozpoczyna się runda punktowa . Podczas rundy punktowej gracz musi nieprzerwanie rzucać 2 k6s, aż osoba rzuci 7 lub swój punkt z poprzedniej rundy. Jeśli osoba wyrzuci 7, przegrywa. Jeśli wyrzucą punkt, wygrywają.
Wyzwanie
Zaimplementuj prosty program symulujący grę w kości. Jeśli dana osoba wyrzuci naturalny lub bzdury podczas rundy come-out, program powinien wypisać „Natural:” lub „Crapping out:”, a następnie rzut i następnie wyjść. W przeciwnym razie powinien wypisać „Punkt:”, a następnie punkt. Następnie, podczas rundy punktowej, powinien generować każdy rzut kością, aż do 7 lub punktu. Jeśli dana osoba wygra, powinna wyjść "Pass"
; jeśli przegrają, powinien wyjść "Don't Pass"
.
Realizacja referencji
Groovy, 277 bajtów
def a={return Math.random()*6+1};int b=a()+a();(b<4||b==12)?{println"Crapping out: "+b}():{(b==7||b==11)?{println"Natural: "+b}():{println"Point: "+b;for(;;){int x=a()+a();println x;(x==7)?{println"Don't Pass";System.exit(0)}():{if(x==b){println"Pass";System.exit(0)}}()}}()}()
Przykładowe wyniki
Natural: 7
Crapping out: 3
Point: 9
4
8
11
9
Pass
i
Point: 5
3
7
Don't Pass
To jest golf golfowy , więc wygrywa najkrótszy kod.
(OŚWIADCZENIE: To wyzwanie nie ma na celu promowania hazardu w jakikolwiek sposób. Pamiętaj, że dom zawsze wygrywa.)
You can't make your program shorter by picking a random number between 1 and 12 for the die roll; it must be two numbers picked between 1 and 6.
- A co z wybieraniem losowej wartości w [1, 12] z rozkładu, który jest identyczny z dodawaniem dwóch jednolitych losowych wartości w [1, 6]?Odpowiedzi:
Ruby 164
Całkiem proste. Ciekawe funkcje:
Przypadki odrzucania są podsumowane jako,
r%12<4
a pozostałe przypadki naturalne są podsumowane jakor%4==3
.Początkowy ciąg jest przechowywany w,
c
a kolejne rolki są pobierane tylko wtedy, gdy jest to później alfabetycznie niż pojedyncza litera?P
(co występuje tylko dlaPoint
.)źródło
Python 3, 190 bajtów
Jest to oparte na odpowiedzi Celeo ; Kilka długich warunkowych zastąpiłem magiczną liczbą, która koduje LUT dla każdej liczby, ponownie użyłem zmiennej i zrobiłem kilka innych golfów. Jeszcze miejsce na golfa; prawdopodobnie można uzyskać mniej niż 170.
Nie próbowałem używać Pythona 2, więc nie wiem, czy byłby krótszy.
źródło
C99,
366312293277 bajtówTo jest mój pierwszy post tutaj, więc zgaduję, że można to znacznie poprawić.
Wersja rozszerzona
Jak widać, istnieje tutaj duża ilość nadmiarowości, którą najprawdopodobniej można wyeliminować.
Podziękowania dla @Mego za pomoc w zmniejszeniu tego.
źródło
a
ab
, a także przy użyciu metody odejmowania wraz z trójskładnikowych operatorów.Python 2,
226224 bajtyPierwsze przejście i jest tam dużo kodu:
Dzięki Mego za 2 bajty!
źródło
PHP
230228218199192188 bajtów186 bajtów bez
<?
Pierwsza próba golfa kodowego! Nie
</br>
jesteś pewien, czy użycie byłoby dozwolone? Ponieważ nie działałoby to w konsoli (jako nowa linia). Daj mi znać, jeśli nie jest to dozwolone i zmieni mój kod.EDYCJA (16-8-16): Po poprawie umiejętności gry w codegolf zauważyłem kilka możliwych ulepszeń. To nadal działa przy użyciu interfejsu wiersza polecenia. Zastąpiony
</br>
trudnym wejściem.źródło
JavaScript 262
źródło
Perl 5 , 140 bajtów
Wypróbuj online!
źródło
PowerShell ,
181183179178167165 bajtów-10 bajtów dzięki mazzy
-2 bajty dzięki Xcali
Wypróbuj online!
Wersja rozwinięta:
Teraz jest kilka mniej istotnych punktów, gdy logika tworzenia listy została przebudowana na przełącznik. Myślę, że nadal jest to całkiem w porządku podejście. +2 bajty naprawiające błąd.
źródło
-notin (7,$z)
ten nie ma znaczenia w reguleDuring the point round, the player must continuously roll ... the previous round
. Teraz pętla kończy się, gdy$m
jest równa7
lub pierwsza runda.Come-out
rundzie i jest to liczba docelowa dla całejPoint
rundy.previous round
DotyczyCome-out
rundzie1?
z wyrażenia regularnego craps.R 197 bajtów
Bez golfa
źródło
Pyth , 108 bajtów
Wypróbuj online!
Pierwsze przejście, prawdopodobnie znajdziesz kilka oszczędności.
źródło
Runiczne Zaklęcia , 151 bajtów
Wypróbuj online!
Po naprawieniu błędu dotyczącego liczb losowych (za każdym razem
'RA
wywoływano ponowne inicjowanie , a czas początkowy był czasem systemowym, co powodowało masowe uruchamianie powtarzanych wartości), działa to poprawnie.Wyjaśnienie
Wejście znajduje się w drugiej linii, ponieważ pierwsza linia do góry
B͍
jest funkcją rzucania dwiema kostkami i ich sumowania.Przebieg programu, z pewnymi zawijanymi krawędziami i zwiniętymi przekierowaniami dla czytelności
Są tylko 4 instrukcje NOP (
{:}≠...?\.6?
), które byłyby bardzo trudne do usunięcia ze względu na wymaganą przestrzeń w innych wierszach (mianowicie długość"Don't "
łańcucha).źródło