Tichu é um jogo de cartas no qual os jogadores se revezam jogando conjuntos de cartas de um baralho que consiste em um baralho de 52 cartas padrão e mais 4 cartas adicionais:
- o dragão , que tem um valor maior do que qualquer outra carta
- a fênix , que pode atuar como um curinga
- o cachorro , que passa a vez para o seu parceiro
- o Mah Jong , que tem valor 1 (e a pessoa que o segura toca primeiro)
O primeiro jogador (que se diz ter "liderança") pode optar por jogar um dos seguintes tipos de combinação de cartas:
- um único (por exemplo
6
) - um par (
JJ
) - um triplo (
555
) - uma casa cheia (
QQQ33
) - um triplo e um par - uma sequência (
56789
) - 5 ou mais cartas consecutivas - a tractor (
223344
) - qualquer sequência consecutiva de pares
Jogadores subseqüentes só podem jogar um baralho do mesmo tipo, mas estritamente mais alto. Por exemplo, QQ
pode ser jogado em cima JJ
, mas QQKK
não pode (é um trator, não um par). Casas completas são ordenadas pelo triplo (por exemplo, 77722
> 44499
), e as retas e tratores devem ter o mesmo comprimento ( 456789
não pode ser jogado por cima 23456
). Ases são altos.
Há uma exceção: qualquer 4 da mesma carta é uma bomba e pode ser jogado em cima de qualquer coisa, exceto uma bomba mais alta. 1
O dragão pode ser jogado sozinho sobre qualquer single ou com chumbo (mas em nenhum outro lugar). A fênix, além de ser um curinga, também pode ser tocada em cima de qualquer single, exceto o dragão. 2 O cão só pode ser jogado sozinho com chumbo e imediatamente termina o turno. 3
Seu desafio é determinar se uma determinada jogada de Tichu é válida, dada a jogada anterior.
Você pode aceitar as duas jogadas em qualquer ordem como listas de números inteiros ou seqüências de caracteres - em ambos os casos, você pode escolher qualquer mapeamento de cartas para números inteiros / caracteres. Se houve uma jogada anterior, ela sempre será válida e, caso contrário (ou seja, o jogador tem vantagem), a primeira entrada será a matriz / sequência vazia (correspondente ao tipo da outra entrada). Não é garantido que os cartões sejam entregues em qualquer ordem específica.
Sua saída deve ser selecionada de um conjunto de exatamente dois valores distintos, um dos quais indica que a reprodução é legal e outra que indica que não.
Não há necessidade de testar se o conjunto de cartas realmente existe no baralho (por exemplo, 77766
seguido por 88877
é impossível porque existem apenas quatro 7) - esses casos nunca serão dados.
Nos seguintes casos de teste, 234567890JQKA
represente 2 a ás e RPD1
represente o dragão, a fênix, o cachorro e o Mah Jong, respectivamente. A cadeia vazia é mostrada aqui como -
. Essas peças são legais:
6 J
JJ QQ
555 KKK
44499 77722
23456 56789
223344 QQKKAA
49494 72727
A R
A P
P R
66 7P
P6 77
58304967 6P0594J7
5P304967 680594J7
57446765 788657P5
- D
- 1
- 12345
3344556677889900 JJJJ
5555 7777
E estes não são:
9 3
66 55
888 444
44 888
77722 44499
44499 777
44499 777JJJ
45678 34567
34567 456789
556677 334455
5566 778899
72727 49494
A A
R A
R P
77 RP
77 6P
P7 66
680594J7 5P304967
6P0594J7 58304967
57446765 3645P536
1 D
2 D
2 1
- 1234
7777 5555
- 223355
1: na verdade, um straight flush também é uma bomba, mas como esse é o único lugar no jogo em que o naipe é importante, eu escolhi deixá-lo de fora por uma questão de simplicidade
2: o valor da fênix jogada em cima de uma carta com o valor n é realmente n + 0,5 (uma fênix em um 9 é um 9 e meio); uma vez que isso requer conhecimento de histórico adicional para ser julgado, nenhum caso de teste envolve uma única jogada em cima de uma única fênix
3: então a primeira entrada nunca será cachorro
fonte
777JJJ
,1234
,223355
). No entanto,RP
não é válido: " O dragão pode ser jogado sozinho em cima de qualquer single ou com chumbo (mas em nenhum outro lugar). "5555 777P
deve ser uma reprodução inválida, mas as duas respostas atuais a marcam como válida.Respostas:
JavaScript (ES6),
274273bytes(a)(b)
Retorna false para válido ou true para inválido.
Experimente online!
Como?
o[]
Para cada classificação de cartas na mão, o slot correspondente
o[]
é incrementado. Depois de voltar a uma string, podemos aplicar as seguintes expressões regulares para detectar cada tipo de mão:Se a mão não acionar nenhuma dessas expressões regulares, é inválida.
(20*)
A fênix (ou seja, o curinga) é simplesmente substituída por cada classificação possível, começando pela mais alta, até que uma correspondência seja detectada.
fonte
Python 3 ,
466455403401399 bytesExperimente online! Entrada é uma lista de ponteiros em que ponte é uma lista de números inteiros 1 com o seguinte mapeamento de valores:
1: Embora os testes TIO vinculados sejam expressos com uma lista de seqüências de caracteres devido à conveniência, que são traduzidas de acordo com o mapeamento de valores antes de chamar
f
fonte