A entrada será duas palavras de cinco letras. Na verdade, eles não precisam ser palavras do dicionário, apenas cinco letras cada, todas minúsculas ou maiúsculas, à sua escolha. Somente AZ aparecerá nas palavras de entrada e elas sempre terão 5 caracteres.
Seu programa é pontuar os dois como se fossem mãos de pôquer e gerar a mão mais alta. É claro que naipes não se aplicam aqui, apenas classificações, para que não haja flushes.
O sistema de classificação de pôquer típico é: '1 par', '2 pares', '3 do mesmo tipo', 'straight', 'full house', '4 do tipo', '5 do tipo' e, é claro existe a possibilidade de a mão (ou palavra neste caso) não valer nada.
No caso de empate , as letras mais próximas de A são consideradas mais altas, então um par de As vence um par de Bs. Em alguns casos, ambas as mãos podem ser idênticas, mas em uma ordem diferente (ou não); nesse caso, produzem uma mão ou uma versão mais recente.
Esta página externa contém informações sobre como identificar o vencedor e, principalmente, aborda os laços nos rankings específicos, caso você não esteja familiarizado com a pontuação das mãos de poker.
No caso de retas : as letras devem estar adjacentes ao alfabeto e não podem ser contornadas. Então 'defgh' em qualquer ordem é uma sequência, 'xyzab' não é.
Exemplos de como marcar uma única mão:
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
Portanto, o programa realmente produzirá resultados como este:
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
A ordem das letras na entrada e na saída é irrelevante; portanto, a ordem na saída pode ser diferente da entrada, mas o mesmo inventário de letras precisa estar presente.
A saída deve conter exatamente cinco letras - nem mais nem menos.
As regras usuais do codegolf se aplicam. O menor código vence.
JavaScript (
250247232 bytes)Código ungolfed e casos de teste no JSFiddle: https://jsfiddle.net/CookieJon/8yq8ow1b/
Salvei alguns bytes graças a @RickHitchcock. @StephenS & @Arnauld
fonte
s=0,h=0
=>s=h=0
Eu acreditox[v]=x[v]?++x[v]:1
pode se tornarx[v]=(x[v]|0)+1
, economizando 3 bytes.Python 2.7,
242223 bytesSemelhante no conceito básico aos exemplos de javascript (classifique por força da mão, com exceção de retas; depois por classificação); mas aproveitando
collections.Counter
Infelizmente,.most_common
não tem o comportamento desejado; então tive que adicionar uma chave de classificação personalizada.Editar: um pouco mais de código de golfe para reduzir 19 bytes.
Código não golfe
fonte
Mathematica, 635 bytes
.
.
Formulário de entrada
fonte