Remarque: Ceci est lié à une variante du jeu Rummikub
Contexte et règles
Rummikub est un jeu basé sur des tuiles. Il existe quatre couleurs: rouge, orange, bleu et noir. Pour chaque couleur, il y a 13 tuiles (étiquetées de 1 à 13), et il y a aussi 2 Jokers qui sont indépendants de la couleur, donc il y a 54 pièces au total. Dans cette variante de Rummikub, chaque joueur reçoit 14 tuiles et doit obtenir une tuile de plus et en déposer une autre à chaque tour, de sorte que le nombre de tuiles soit constant. Les joueurs ne se voient pas. L'objectif est de regrouper les tuiles, de sorte que toutes les pièces appartiennent à au moins un groupe (voir ci-dessous). Lorsqu'un joueur a regroupé toutes les pièces, il laisse tomber son panneau de tuiles et révèle ses pièces. Les autres vérifient ensuite si toutes les combinaisons sont valides et si elles le sont, le joueur gagne la manche.
Comment regrouper les tuiles?
Il n'y a que deux types de groupes:
Groupes multicolores :
- Ils se composent de 3 ou 4 tuiles.
- Ils ne contiennent que des tuiles portant le même numéro.
- Toutes les tuiles sont de couleurs différentes.
- Exemple:
RED 9, BLUE 9, BLACK 9
.
Couleur Mono groupes:
- Ils se composent d'au moins 3 tuiles.
- Ils ne peuvent pas contenir plus de 13 tuiles.
- Ils ne contiennent que des tuiles portant des numéros différents et consécutifs, dans l'ordre croissant.
- Toutes les tuiles ont la même couleur.
- Les carreaux étiquetés avec
1
ne peuvent pas être placés après les carreaux étiquetés13
. - Exemple:
RED 5, RED 6, RED 7
.
Attendez, que font les Jokers?
Les jokers peuvent remplacer n'importe quelle pièce du jeu. Par exemple, notre premier exemple peut devenir JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
ou RED 9, BLUE 9, JOKER
. La même chose s'applique à notre autre exemple. Cependant, on ne peut pas placer deux Jokers dans le même groupe, donc des choses comme JOKER, ORANGE 8, JOKER
sont interdites.
Tâche
Étant donné un groupe de tuiles Rummikub, déterminez s'il est valide. Vous êtes assuré qu'aucune tuile en double n'apparaîtra, à l'exception des 2 jokers et que les tuiles que vous recevez en entrée sont valides (par exemple, des choses comme 60
n'apparaîtront pas).
Entrée sortie
Vous pouvez prendre une entrée et fournir la sortie par n'importe quelle méthode standard.
Certains formats d'entrée valides: liste de chaînes, liste de tuples, listes imbriquées, chaînes ou tout autre élément que vous jugez approprié. Les couleurs peuvent être considérées comme des chaînes (par exemple:) "Blue","Red", etc.
, comme des abréviations de chaînes (veuillez distinguer les tuiles bleues et noires) ou comme des nombres entiers correspondant à une couleur. En ce qui concerne les Jokers, vous devez mentionner la façon dont votre programme les reçoit en entrée. Si vous choisissez des cordes, vous pouvez avoir quelque chose comme RED 9, JOKER, ...
, si vous choisissez des tuples que vous pouvez avoir (9,"RED"), ("JOKER")
ou quelque chose d'équivalent. Si cela vous aide, vous pouvez recevoir une couleur pour ce Joker (ce qui ne devrait pas affecter la sortie de votre programme). Par exemple, vous pouvez avoir ("JOKER","RED")
ou ("JOKER","BLUE")
, mais cela ne doit en aucun cas influencer la sortie.
En ce qui concerne la sortie, les règles standard pour un problème de décision s'appliquent.
Exemples travaillés
Prenons un exemple qui, je l'espère, faciliterait la compréhension. Étant donné un groupe comme suit, où chaque tuple représente une tuile:
[(9, "ROUGE"), (9, "ORANGE"), ("JOKER"), (9, "NOIR")]
Cela devrait renvoyer une valeur véridique, car l'entrée est valide. Dans ce cas, le Joker se substitue (9, "BLUE")
et ils forment un groupe multicolore.
Si vous receviez le groupe suivant:
[(9, "BLEU"), (9, "ORANGE"), (9, "ROUGE"), (9, "NOIR"), ("JOKER")]
Ce serait invalide, et donc votre programme devrait retourner une valeur fausse, car il n'y a plus rien à substituer au joker, car le nombre maximum de cartes dans un groupe multicolore est 4.
Cas de test supplémentaires
Ce sont pour une suite de tests étendue qui couvre presque toutes les situations possibles:
Entrée -> Sortie [(1, "BLEU"), (2, "BLEU"), (3, "BLEU"), (4, "BLEU"), (5, "BLEU"), (6, "BLEU")] - > véridique [(6, "BLEU"), (6, "ROUGE"), (6, "NOIR)] -> véridique [(5, "NOIR"), (6, "NOIR"), (7, "NOIR"), (8, "NOIR"), (9, "NOIR"), (10, "NOIR"), ( "JOKER"), (12, "NOIR")] -> véridique [("JOKER"), (3, "BLEU"), (3, "ROUGE")] -> véridique [(8, "NOIR"), (2, "ROUGE"), (13, "BLEU")] -> falsy [(4, "RED"), (3, "RED"), (5, "RED")] -> falsy [(5, "NOIR"), (6, "NOIR)] -> faux [("JOKER"), (5, "RED"), ("JOKER")] -> falsy [(4, "RED"), (5, "RED"), (6, BLUE ")] -> falsy [(4, "RED"), ("JOKER"), (5, "RED")] -> falsy [(12, "NOIR"), (13, "NOIR), (1," NOIR ")] -> faux
C'est le code-golf , donc le code le plus court en octets dans chaque langue gagne!