Dane wejściowe będą składały się z dwóch pięciu liter. W rzeczywistości nie muszą to być słowa słownikowe, tylko pięć liter, każda mała lub cała wielka, twój wybór. W słowach wejściowych pojawi się tylko AZ i zawsze będą one miały długość 5 znaków.
Twój program polega na zdobyciu ich obu tak, jakby to były ręce pokera, i uzyskanie wyższego układu. Oczywiście kolory nie będą tu obowiązywać, tylko rankingi, więc nie ma kolorów.
Typowy system rankingowy pokera to: „1 para”, „2 pary”, „3 w swoim rodzaju”, „strita”, „full house”, „4 w swoim rodzaju”, „5 w swoim rodzaju” i oczywiście istnieje możliwość, że ręka (lub słowo w tym przypadku) może być nic nie warta.
W przypadku remisów litery bliższe A są uważane za wyższe, więc para As bije parę Bs. W niektórych przypadkach obie ręce mogą być identyczne, ale w innej kolejności (lub nie), w takim przypadku wypisuje albo rękę, albo jej wersję.
Ta zewnętrzna strona zawiera informacje o tym, jak zidentyfikować zwycięzcę, a zwłaszcza dotyczy powiązań w ramach konkretnych rankingów, na wypadek, gdybyś nie był zaznajomiony z tym, jak zdobywać układy w pokerze.
W przypadku prostych : litery muszą przylegać do alfabetu i nie mogą się zawijać. Zatem „defgh” w dowolnej kolejności jest prostą, „xyzab” nie jest.
Przykłady, jak zdobyć jedną rękę:
word | scored as
---------------------
ccccc | 5 of a kind <-- highest ranking
woooo | 4 of a kind
opopo | full house
vurst | straight
vovvu | 3 of a kind
ppoww | 2 pairs
upper | 1 pair
kjsdf | high card only (in this case D) <-- lowest ranking
Tak więc program faktycznie wygeneruje takie wyniki:
input | output
-----------------------
voviu,kjsdf | voviu because a pair beats nothing
opoqo,upper | opoqo because 3 of a kind beats a pair
woooo,ggegg | ggegg because 4 Gs beats 4 Os
queue,hopup | queue because 2 pairs beats 1 pair
lodpl,ddkop | ddkop because pair DD beats pair LL
huhyg,hijht | huhyg both have pair HH, but G beats I
ddffh,ccyyz | ccyyz both have 2 pairs, but CC(yyz) beats DD(ffh)
okaok,nkunk | nkunk KK ties with KK, but NN beats OO
abcdf,bcdef | bcdef because it is a straight
qtery,retyq | qtery identical! so doesnt matter
abedc,vyxwz | abedc because it is a "higher" straight
hhhij,hijkl | hijkl because straight beats 3 of a kind
aaabb,zzzzz | zzzzz because nothing beats 5 of a kind
Kolejność liter zarówno na wejściu, jak i na wyjściu jest nieistotna, więc kolejność na wyjściu może być inna niż na wejściu, ale musi istnieć taki sam spis liter.
Wynik musi zawierać dokładnie pięć liter - nie więcej, nie mniej.
Obowiązują zwykłe zasady gry w codegolf. Najkrótszy kod wygrywa.
JavaScript (
250247232 bajty)Nieprzeczytany kod i przypadki testowe w JSFiddle: https://jsfiddle.net/CookieJon/8yq8ow1b/
Zaoszczędziłem trochę bajtów dzięki @RickHitchcock. @StephenS & @Arnauld
źródło
s=0,h=0
=>s=h=0
Wierzęx[v]=x[v]?++x[v]:1
może staćx[v]=(x[v]|0)+1
, oszczędzając 3 bajty.Python 2.7,
242223 bajtyPodobne w podstawowej koncepcji do przykładów javascript (sortuj według siły ręki z wyjątkiem prostych, a następnie według rangi); ale korzystanie z
collections.Counter
Niestety.most_common
nie ma pożądanego zachowania; więc musiałem dodać niestandardowy klucz sortowania.Edycja: trochę więcej golfa, aby skrócić 19 bajtów.
Kod bez golfa
źródło
Mathematica, 635 bajtów
.
.
Formularz wejściowy
źródło