На входе будут два пятибуквенных слова. На самом деле они не должны быть словарными словами, просто любые пять букв каждое, все строчные или прописные, на ваш выбор. Во входных словах будет отображаться только AZ, и они всегда будут иметь длину 5 символов.
Ваша программа состоит в том, чтобы забить их обоих, как если бы они были покерными руками и вывести более высокую руку. Конечно, костюмы здесь не применимы, только рейтинги, поэтому нет флешей.
Типичная система рейтинга в покере: «1 пара», «2 пары», «3 в своем роде», «стрит», «фулл-хаус», «4 в своем роде», «5 в своем роде» и, конечно, есть вероятность, что рука (или слово в этом случае) может ничего не стоить.
В случае связей буквы ближе к A считаются более высокими, поэтому пара As побеждает пару B. В некоторых случаях обе руки могут быть идентичны, но в разном порядке (или нет), в этом случае выведите либо руку, либо ее пересмотренную версию.
Эта внешняя страница содержит информацию о том, как определить победителя, и, в частности, адреса связей в конкретных рейтингах, если вы не знакомы с тем, как набирать покерные комбинации.
В случае прямых : буквы должны быть смежными в алфавите и не допускаются для переноса. Таким образом, «defgh» в любом порядке является прямым, «xyzab» - нет.
Примеры того, как забить одну руку:
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
Таким образом, программа на самом деле даст такие результаты:
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
Порядок букв как на входе, так и на выходе не имеет значения, поэтому порядок вывода может отличаться от ввода, но должен присутствовать один и тот же перечень букв.
Вывод должен содержать ровно пять букв - ни больше, ни меньше.
Обычные правила Codegolf применяются. Самый короткий код выигрывает.
JavaScript (
250247232 байта)Разоблаченный код и контрольные примеры в JSFiddle: https://jsfiddle.net/CookieJon/8yq8ow1b/
Сохранено несколько байтов благодаря @RickHitchcock. @StephenS & @Arnauld
источник
s=0,h=0
=>s=h=0
Я верюx[v]=x[v]?++x[v]:1
может статьx[v]=(x[v]|0)+1
, экономя 3 байта.Python 2,7,
242223 байтаСхожи в базовом понятии с примерами javascript (сортировка по силе руки, за исключением стритов; затем по рангу); но, пользуясь преимуществом
collections.Counter
К сожалению,.most_common
не совсем желаемое поведение; поэтому пришлось добавить пользовательский ключ сортировки.Изменить: немного больше кода игры в гольф, чтобы сократить 19 байтов.
Код без гольфа
источник
Mathematica, 635 байт
,
,
Форма ввода
источник