Tichu est un jeu de cartes dans lequel les joueurs jouent à tour de rôle des jeux de cartes à partir d'un jeu de cartes composé d'un jeu de 52 cartes standard, plus 4 cartes supplémentaires:
- le dragon , qui a une valeur supérieure à toute autre carte
- le phénix , qui peut servir de joker
- le chien , qui passe le tour à votre partenaire
- le Mah Jong , qui a la valeur 1 (et la personne qui le tient joue en premier)
Le premier joueur (qui est censé avoir une «avance») peut choisir de jouer l'un des types de combinaisons de cartes suivants:
- un seul (par exemple
6
) - une paire (
JJ
) - un triple (
555
) - une maison pleine (
QQQ33
) - un triple et une paire - une ligne droite (
56789
) - 5 cartes consécutives ou plus - un tracteur (
223344
) - toute séquence consécutive de paires
Les joueurs suivants ne sont alors autorisés qu'à jouer un jeu de cartes du même type, mais strictement supérieur. Par exemple, QQ
peut être joué par dessus JJ
, mais QQKK
ne peut pas (c'est un tracteur, pas une paire). Les maisons pleines sont ordonnées par le triple (par exemple 77722
> 44499
), et les lignes droites et les tracteurs doivent être de la même longueur ( 456789
ne peuvent pas être joués dessus 23456
). Les as sont élevés.
Il y a une exception: les 4 cartes de la même carte sont des bombes et peuvent être jouées sur n'importe quoi sauf une bombe plus haute. 1
Le dragon peut être joué seul sur n'importe quel single ou avec du plomb (mais nulle part ailleurs). Le phénix, en plus d'être un joker, peut également être joué au-dessus de n'importe quel single sauf le dragon. 2 Le chien ne peut être joué seul qu'avec la laisse et termine immédiatement le tour. 3
Votre défi consiste à déterminer si un jeu Tichu donné est valide, compte tenu du jeu précédent.
Vous pouvez accepter les deux jeux dans n'importe quel ordre en tant que listes d'entiers ou de chaînes - dans les deux cas, vous pouvez choisir n'importe quel mappage de cartes en entiers / caractères. S'il y a eu un jeu précédent, il sera toujours valide et sinon (c'est-à-dire que le joueur a le plomb), la première entrée sera le tableau / la chaîne vide (correspondant au type de l'autre entrée). Les cartes ne sont pas garanties d'être données dans un ordre particulier.
Votre sortie doit être sélectionnée parmi un ensemble d'exactement deux valeurs distinctes, l'une indiquant que le jeu est légal et l'autre qui ne l'est pas.
Il n'est pas nécessaire de vérifier si le jeu de cartes existe réellement dans le jeu (par exemple, 77766
suivi de 88877
est impossible car il n'y a que quatre 7) - de tels cas ne seront jamais donnés.
Dans les cas de test suivants, 234567890JQKA
représentent 2 par as et RPD1
représentent respectivement le dragon, le phénix, le chien et Mah Jong. La chaîne vide est représentée ici sous la forme -
. Ces jeux sont légaux:
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
Et ce ne sont pas:
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: en fait, une quinte flush est aussi une bombe, mais comme c'est le seul endroit du jeu où la couleur des cartes est importante, j'ai choisi de la laisser de côté pour plus de simplicité
2: la valeur du phénix joué au dessus d'une carte de valeur n est en fait n + 0,5 (un phénix sur un 9 est un 9 et demi); comme cela nécessite une connaissance de l'historique supplémentaire pour statuer, aucun cas de test n'implique un seul joué au-dessus d'un seul phénix
3: donc la première entrée ne sera jamais un chien
la source
777JJJ
,1234
,223355
). Cependant,RP
n'est pas valide: " Le dragon peut être joué seul sur n'importe quel single ou avec du plomb (mais nulle part ailleurs). "5555 777P
devrait être un jeu invalide, mais les deux réponses actuelles le marquent comme valide.Réponses:
JavaScript (ES6),
274273 octetsPrend l'entrée commea b
(a)(b)
, où et sont des tableaux d'entiers avec:Renvoie false pour valide ou true pour invalide.
Essayez-le en ligne!
Comment?
Pour évaluer une main, nous construisons un tableau9
o[]
composé d'un tête , initialement suivi de 16 zéros:Pour chaque rang de carte dans la main, l'emplacement correspondant
o[]
est incrémenté. Une fois joint à une chaîne, nous pouvons appliquer les expressions régulières suivantes pour détecter chaque type de main:Si la main ne déclenche aucune de ces expressions régulières, elle n'est pas valide.
La valeur de la main est donnée par le nombre de zéros juste après le tête (le plus élevé est le mieux). Un cas spécial est une maison pleine où le rang du triple est supérieur à celui de la paire, auquel cas nous devons ajouter la longueur du motif.9
(20*)
Le phénix (c'est-à-dire le caractère générique) est simplement remplacé par chaque rang de carte possible, en commençant par le plus élevé, jusqu'à ce qu'une correspondance soit détectée.
la source
Python 3 ,
466455403401399 octetsEssayez-le en ligne! L'entrée est une liste de mains où main est une liste d'entiers 1 avec le mappage de valeurs suivant:
1: Bien que les tests TIO liés soient exprimés avec une liste de chaînes en raison de leur commodité qui sont traduites en fonction du mappage de valeurs avant d'appeler
f
la source