Yahtzee to gra z pięcioma sześciokątnymi kostkami i arkuszem wyników z trzynastoma różnymi polami do wypełnienia wyniku. Każde pole ma swoje własne reguły punktacji:
- 1s, 2s, 3s, 4s, 5s, 6s wszystkie punkty są równe sumie odpowiednich kości (to znaczy rzut [3, 2, 3, 1, 5] zdobytych jako 3s otrzyma 6 punktów: 3 dla każdego 3).
- 3 w swoim rodzaju i 4 w swoim rodzaju (jak brzmią, trzy lub cztery kostki rzuciły to samo) zdobywają punkty równe sumie wszystkich pięciu kości.
- Fula (dwie kości pokazują jedną wartość, pozostałe trzy pokazują inną) osiąga 25 punktów
- Mała prosta (cztery kolejne wartości) zdobywa 30 punktów
- Duża prosta (wszystkie kolejne wartości) zdobywa 40 punktów
- Yahtzee (wszystkie kości mają tę samą wartość) zdobywa 50 punktów
Trzynasta (szansa) ma sens w grze, ale nie tyle w przypadku tego wyzwania; dodatkowo gra ma bonusy za dodatkowe Yahtzees, co nie ma tutaj sensu. Ponieważ wyzwaniem jest ...
Biorąc pod uwagę pięć kości jako dane wejściowe (pięć liczb całkowitych 1-6, jednak dane wejściowe są wygodne, można założyć, że dane wejściowe są zawsze ważne), dają najwyższy możliwy wynik dla tej „ręki”. Do celów tego wyzwania ważne są tylko metody punktacji z powyższej listy (w szczególności szansa nie jest prawidłowym polem punktacji dla tego wyzwania). Wynik powinien być wyprowadzany jako jego dziesiętna wartość liczbowa, niezależnie od tego, czy jest to liczba całkowita, czy reprezentacja ciągu, cokolwiek. Powinien być natychmiast rozpoznawalny jako liczba. Wiodące / końcowe białe znaki są w porządku, chodzi o uzyskanie wyniku, a nie prezentacji.
Code golf, więc wygrywa odpowiedź z najmniejszą liczbą bajtów w danym języku. Standardowe luki zabronione.
Przypadki testowe
(Pamiętaj, że wszystkie są niezależne, wyzwanie polega na zdobyciu jednej „ręki” kości):
in: 1 5 4 3 2
out: 40
in: 1 1 4 3 1
out: 10
in: 2 2 6 5 3
out: 6
in: 2 4 2 4 6
out: 8
in: 1 1 1 1 1
out: 50
in: 5 2 5 3 6
out: 10
in: 1 6 3 4 2
out: 30
in: 1 3 1 1 3
out: 25
in: 6 5 5 6 6
out: 28
in: 1 2 3 5 6
out: 6
Odpowiedzi:
R ,
146141 bajtówWypróbuj online!
Outgolfed by plannapus
Pobiera dane wejściowe jako listę i zwraca wynik.
trochę golfa:
źródło
f(c(1,2,3,5,6))
kończy się niepowodzeniem - powinno dać 6, a zamiast tego daje 30. Wygląda na to, że liczysz, ile par (posortowanie) różni się o jeden, co w rzeczywistości wynosi cztery dla powyższej sekwencji, nawet jeśli nie jest to prosta z czterech. Myślę, że natknąłem się na to, gdy robiłem to jakiś czas temu i prawdopodobnie powinienem dodać to jako przypadek testowy ...Python 2 ,
187184167165 bajtów-17 bajtów dzięki @mypetlion
-2 bajtów dzięki @chrstphrchvz
Wypróbuj online!
źródło
R
136136 bajtówGrał w golfa o 2 bajty dzięki @Giuseppe !
Zębaty,
Kilka przypadków testowych:
źródło
factor
przez chwilę, zanim się rozproszyłem. Ale myślę, że jeśli zastosuję twoje podejściez
(s
w mojej odpowiedzi), mogę zagrać w golfa do 134 ...all(y<4&y-1)
i używając*
zamiast[
, i ustawiający
inline zamiast jako argument funkcji, i nadal przechodzi on wszystkie przypadki testowe: Wypróbuj online!max
i myślę, że uratowało to bajt przed ustawieniemy
inline.Partia, 359 bajtów
Wyjaśnienie:
Oblicz liczbę kości dla każdej liczby, plus maksimum, sumę wszystkich kości oraz najwyższą sumę kości o tej samej liczbie.
Jeśli wszystkie kości są różne, może to być długa prosta, ale to musi być albo brak,
1
albo nie6
.W przeciwnym razie lub jeśli co najwyżej dwie kości są takie same, może to być krótka prosta. Musi być co najmniej a
3
i a,4
a także kombinacja pozostałych czterech liczb.Jeśli są trzy takie same kości, odtąd sprawdź fula
3^2==1
. Jednak niektóre pełne domy, takie jak 6s i 5s, mają wyższą ocenę jako 3-w swoim rodzaju.W przeciwnym razie lub jeśli są cztery takie same, zdobądź sumę.
A jeśli jest ich pięć, to Yahtzee!
Wyprowadź najlepszy wynik.
źródło
Galaretka , 58 bajtów
Wypróbuj online!
źródło
25.0
podczas gdy żadna inna sprawa nie ma końca.0
?2.5 × 10 = 25.0
(arytmetyka zmiennoprzecinkowa), podczas gdy inne, takie jak30
są wywnioskowane jako3 × 10 = 30
(arytmetyka liczb całkowitych).× 10
ma 2 bajty,2.5
ma 2 bajty podobnie25
i3,5,4
zapisuje 3 bajty30,50,40
, więc 3 + 0 - 2 = 1 bajt zapisany.Perl 6 , 159 bajtów
Wypróbuj online!
Ponieważ dane wejściowe można zaakceptować „jednak jest to wygodne”, moja funkcja przyjmuje je jako instancję
Bag
klasy, która jest kontenerem z mnogością. ABag
jest również pojemnikiem asocjacyjnym;$bag{$key}
zwraca ile razy$key
występuje w torbie.Większość funkcji to tylko lista funkcji, które oceniają każdą możliwą rękę Yahtzee, zwracając wynik dla tej ręki lub zero, jeśli warunki dla ręki nie są spełnione.
|(1..6).map({ *{$_} * $_ })
jest listą sześciu funkcji, które oceniają ręce w oparciu o powtarzane przebiegi liczb 1-6. Wiodące|
spłaszcza tę listę do listy otaczającej.{.kxxv.sum * ?.values.grep(* > 2) }
ocenia 3 i 4 w swoim rodzaju rozdania..kxxv
na aBag
zwraca klucze powtarzane z wielokrotnością każdego, odzyskując pierwotną listę rzutów.sum
kostek i oczywiście sumuje kości. Suma ta jest mnożona przez wartość boolowską (?
), która jest prawdą, jeśli worek.values
(tj. Krotność) zawiera wartość większą niż 2.{ 25 * (6 == [*] .values) }
ocenia układ full house. 25 mnoży się przez wartość logiczną, która jest prawdą, jeśli iloczyn wielokrotności wynosi 6, co dla pięciu kości może się zdarzyć tylko wtedy, gdy jedna ma 3, a druga 2.30 * ?*{ 3 & 4 & (1 & 2 | 2 & 5 | 5 & 6) }
ocenia małą, prostą rękę. ToWhateverCode
funkcja; drugą gwiazdą*
jestBag
. Wyrażenie pomiędzy nawiasami klamrowymi to połączenie wartości 3 i 4 oraz 1 i 2 lub 2 i 5 lub 5 i 6. Wyszukiwanie tego połączenia w wynikuBag
daje połączenie odpowiednich krotności. Jeśli wielokrotności 3 i 4 oraz co najmniej jeden z 1 i 2 lub 2 i 5 lub 5 i 6 są niezerowe, połączenie jest prawdziwe po wymuszeniu na wartość logiczną (z?
), a ta wartość logiczna jest mnożona przez 30 aby uzyskać wynik.40 * ?*{ 2 & 3 & 4 & 5 & (1 | 6) }
podobnie ocenia dużą prostą rękę. Jest to prostsze, ponieważ kości muszą zawierać każdą z liczb 2-5 oraz 1 lub 6.50 * (*.keys == 1)
ocenia rękę Yahtzee. Jest to po prostu 50-krotność wartości logicznej, co jest prawdą, jeśli liczba odrębnych kości wynosi jeden.źródło
Pip ,
6563 bajtówBierze kostkę jako pięć argumentów wiersza poleceń. Wypróbuj online!
Niegolfowane + wyjaśnienie
(To jest oryginalna wersja.)
źródło
Rubinowy , 184 bajty
Pełny program Aby ułatwić testowanie danych wejściowych, dodaj
$/=' '
na górze, aby przeczytać w formacie „cyfra oddzielona spacjami”. (191 znaków)Zerwałem barierę 200 bajtów i z łatwością udało mi się ją zniszczyć, pozostawiając tuzin bajtów!
Wypróbuj online!
Wyjaśnienie
Jednak niezbyt dobry. Mam nadzieję, że masz trochę wiedzy Ruby ~
źródło