Kierki to podstępna gra karciana dla 4 graczy. Każdą lewę podejmuje gracz, który zagrał najwyższą kartę w wiodącym kolorze. Na koniec każdego rozdania gracze otrzymują wynik karny w zależności od zabranych kart karnych; zadaniem jest określenie wyników zgodnie z zasadami Microsoft Hearts .
Wkład
Dane wejściowe to 4 listy (lub ciąg znaków, tablica itp.) Pokazujące karty kar odebrane przez każdego z 4 graczy. Karty kar są
2♥, 3♥, 4♥, 5♥, 6♥, 7♥, 8♥, 9♥, 10♥, J♥, Q♥, K♥, A♥, Q♠
które będziemy reprezentować jako
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 0
odpowiednio.
Wydajność
Wyjście to 4 punkty karne poniesione przez 4 graczy (lista, ciąg znaków, tablica itp.). Punktacja wygląda następująco:
- Każde serce (
♥
reprezentowana przez liczb1
do13
włącznie) zaciąga 1 punkt - Królowa pik (
Q♠
reprezentowana przez0
) otrzymuje 13 punktów - Wyjątek: jeśli gracz zabrał wszystkie karty kar (zwane strzelaniem do księżyca), wówczas otrzymuje 0 punktów, podczas gdy wszyscy inni gracze otrzymują 26 punktów.
Przypadki testowe
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13] --> 4, 2, 0, 20
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [], [], [1] --> 25, 0, 0, 1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0], [], [], [] --> 0, 26, 26, 26
Najkrótszy kod w bajtach wygrywa.
źródło
_26&1b
. -2 bajty.1b
... Starałem się znaleźć krótką drogę do włączenia[26]
się26
i[]
na0
ale jakoś nie przyszło mi do głowy. Dziękuję :)R,
85 7774 bajtówNienazwana funkcja, która pobiera listę R jako dane wejściowe. Działa poprzez zliczenie liczby elementów
>0
i dodaje 13, jeśli dowolny element w każdym wektorze jest<1
(tj. Królowa pik) i zapisuje jakoz
.Jeśli którykolwiek element
z
jest>25
, zwróć26-z
, w przeciwnym razie zwróćz
.Wypróbuj na skrzypcach R.
źródło
26-z
zadziała?C ++ 14, 158 bajtów
Jak nienazwana Lambda:
Wymaga a
vector<vector<int>>
i zwracavector<int>
Nie golfowany:
Kilka przypadków testowych dla Ciebie:
źródło
Python 2,
757271 bajtówPobiera dane wejściowe jako
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13]
źródło
12*(0in a)
.print[[x,26-x][26in i]for x in i]
jest o jeden bajt krótszy.PHP, 113 bajtów
funkcja pobiera tablicę tablic, zwraca tablicę wartości.
Podziwiaj inne mapowanie tablic w PHP: pętle z odnośnymi elementami. Waaay krótszy niż
array_map
.źródło
Haskell,
625956 bajtówStosowanie:
źródło
f
jakof n=13^0^n
.f x|all(<26)x=x|0<1=map(26-)x
i użycie zamiast funkcji lambda pozwala zaoszczędzić kilka bajtów.05AB1E ,
262221 bajtówKońcowe białe znaki należy usunąć z danych wejściowych, aby interpretować je jako tablicę. Zakończenie zostało zainspirowane innymi odpowiedziami przy użyciu (26-x), gdy gracz zebrał wszystkie karty karne.
Wypróbuj online!
Nadal wygląda całkiem golfowo, ze zduplikowanymi stałymi i instrukcjami warunkowymi.
Poprzednia wersja, 26 bajtów
(Jeden bajt na każdy punkt w maksymalnej wartości kary)
Zdecydowałem się go zachować, ponieważ jego długość najlepiej pasuje do tego wyzwania moim zdaniem :).
Wypróbuj online!
źródło
Python 3, 101 bajtów
Pełny kod:
źródło
12*(c<1)+1
jest o 2 bajty krótszy niż(1,13)[c==0]
.26*(s>25)
jest o 3 bajty krótszy niż(26,0)[s==26]
.JavaScript (ES6),
82807772706967 bajtówZaoszczędź 2 bajty dzięki @Neil
Awaria
źródło
c=>b*26^c
oszczędza 2 bajty.Pip , 28 bajtów
27 bajtów kodu, +1 dla
-p
flagi.Pobiera dane z wiersza poleceń jako ciąg reprezentujący zagnieżdżoną listę, np.
"[[2 8 7 1] [3 4] [] [9 5 6 0 10 11 12 13]]"
(Cudzysłowy nie są potrzebne w TIO). Wypróbuj online!źródło
Ruby, 59 bajtów
Lub alternatywnie
Jeśli tylko jedna ręka ma jakieś karty, chcemy, aby puste ręce otrzymały wartość 26, a ręka z kartami otrzymała wartość 0. Robię to, sprawdzając
min
ręce - to zwracanil
pustą tablicę, a następnie I||
do 26. W innych przypadkach liczę liczbę kart w ręce, a następnie dodam 12 do Królowej Pik.źródło
Scala, 93 bajty
Stosowanie:
Wyjaśnienie:
Mógłbym użyć
%toSet 26
zamiast% contains 26
boSet
„sapply
metoda jestcontains
i nie dostać-at-indeks jakSeq
” sźródło