To wyzwanie polega na zdobyciu ręki Cribbage. Jeśli nie grasz w Cribbage, musisz się trochę nauczyć. Gramy standardową talią pokera, a ręka składa się z czterech kart plus „dodatkowa karta”. Istnieją dwa rodzaje rąk: normalny i „ręka szopka”.
Karty są w formacie, w vs
którym v
jest jednym z: A23456789TJQK
(T dla dziesięciu) i s
jest jednym z SCDH
. Ręka zostanie podana w formie (na przykład)
AS 2D 3H JS | 4S
gdzie 4S
jest karta up. Ręka szopki ma format
JD 3C 4H 5H | 5S !
Karty twarzy mają wartość 10, a as ma wartość 1. Punktacja odbywa się w następujący sposób.
- Piętnaście: za każdy podzbiór pięciu kart, których suma wynosi 15, dodaj dwa punkty.
- Pary: za każdą parę kart o tej samej wartości (bez wartości) dodaj dwa punkty.
- Przebiegi: dla każdego maksymalnego przebiegu kolejnych kart o długości większej niż 2, dodaj długość przebiegu w punktach.
- Kolor: jeśli wszystkie pięć kart ma ten sam kolor, dodaj pięć punktów. W przeciwnym razie, jeśli wszystkie oprócz tej samej karty mają ten sam kolor, dodaj cztery punkty. Jeśli jest to ręka szopka, wariant czteropunktowy nie jest liczony.
- Noby: jeśli w ręku znajduje się walet z tym samym kolorem wyższej karty, dodaj jeden punkt.
Uwagi:
Trójki i czwórki nie są wyjątkowe - w trójce są trzy pary, więc trójka jest warta 6 punktów.
Przebiegi mogą się nakładać. Na przykład
AS AH 2D 3C | 2C
(podwójny podwójny przebieg) ma cztery przebiegi o długości 3 i dwie pary, więc jest warte 3 + 3 + 3 + 3 + 2 + 2 = 16 punktów.Liczone są tylko maksymalne przebiegi, więc
KS QD JD TC | 9S
jest warte 5 punktów, ponieważ jest to przebieg 5. Podbieg nie są liczone.
Reguła domowa:
Niemożliwe jest zdobycie 19 punktów w rozdaniu. Zamiast zera zgłoś wynik 19.
Przykłady:
5S 5H 5D JS | KS
21
AS 2D 3H JS | 4S !
9
JD 3C 4H 5H | 5S
12
9S 8S 7S 6S | 5H !
9
9S 8S 7S 6S | 5H
13
8D 7D 6D 5D | 4D !
14
8D 7D 6D 5D | 4D
14
AD KD 3C QD | 6D
19
To jest kod golfowy. Najkrótsze rozwiązanie wygrywa.
Odpowiedzi:
GolfScript,
187178174 znakówPonieważ nigdy nie grałem w cribbage, nie znam żadnych fantazyjnych sztuczek. Dlatego pomyślałem, że jedynym sposobem na rywalizację (przynajmniej trochę) jest użycie języka golfowego. Kod jest dość prosty GolfScript, przypadki testowe można znaleźć tutaj .
Kod w bardziej czytelny sposób ( nieco sformatowany i nieogolony ):
Edycja: Zmieniono logikę dla piętnastu i kolorów.
źródło
C, 364
388znakówJest duży i brzydki (choć nie tak duży, jak kiedyś):
(Podziały linii zostały dodane, aby ułatwić czytanie; nie są one uwzględnione w powyższej tabeli).
Opis problemu nie określał, czy kod musi sprawdzać, czy dane wejściowe są nieprawidłowe, więc oczywiście założyłem, że program mógł dowolnie zachowywać się, jeśli dane wejściowe zawierały, na przykład, dodatkowe białe znaki.
Oto wersja bez golfa:
źródło
Ruby 1.9,
359356To zdecydowanie za długo - prawie tyle samo, co rozwiązanie C.
źródło
Coś na początek… Ruby,
422 365 355352Nieznacznie nie golfista:
Testy jednostkowe dla wersji golfowej:
Wyniki:
źródło
Python, 629 znaków
Wysyłam moje tylko dlatego, że nikt inny nie ma. Jest dość długi :(
źródło
print s or 19
? Myślę, że możesz także użyć Pythona 3.x i zgolić jeszcze 3 znaki (raw_input
doinput
, a następnieprint s or 19
doprint(s or 19)
).Python 2,
606584 bajtówOszczędność 22 bajtów dzięki grze w golfa Jo Kinga .
Wypróbuj online!
Nieco krótszy niż odpowiedź grc i podąża inną drogą, aby się tam dostać.
Wyjaśnienie:
Wyjaśnienie dotyczące logiki uruchomień:
źródło
if
aby dostać się do 584 bajtówStax , 106 bajtów
Uruchom i debuguj online!
Bonus za CP437: Widzisz symbol tych kolorów w zapakowanym Staxie? Szkoda, że kluby się nie pojawiają ...
Odpowiednikiem ASCII jest
Wyjaśnienie
źródło