Dans Magic: the Gathering, les mages (appelés «planeswalkers») s'affrontent en lançant des sorts. Les sorts coûtent du mana. Il existe cinq couleurs de mana: blanc, bleu, noir, rouge et vert, représentées respectivement par {W}, {U}, {B}, {R} et {G}.
Le coût d'un sort est légèrement plus complexe. Le coût peut être n'importe quelle combinaison des éléments suivants:
- Une ou plusieurs couleurs
- Un ou plusieurs incolores, représentés par {X}, où X est un entier positif
- Un ou plusieurs hybrides, représentés par {Y / Z}, où Y et Z sont soit une couleur (représentée par l'une des cinq lettres) soit incolore, représentée par un entier positif
Les règles suivantes s'appliquent lorsque vous tentez de lancer un sort:
- Une couleur dans un coût doit être satisfaite par un mana de cette couleur
- Un coût incolore {X} peut être satisfait par X mana de n'importe quelle couleur
- Un coût hybride {Y / Z} peut être satisfait en satisfaisant soit Y soit Z
- Notez que les accolades ne sont pas imbriquées
- Y et Z ne sont pas hybrides
Écrivez un programme ou une fonction qui, étant donné un pool de mana et un coût, imprime ou retourne vrai (ou une certaine valeur véridique) si et seulement si le mana dans ce pool peut satisfaire le coût, sinon faux (ou une valeur falsifiée).
Une réserve de mana est une chaîne non vide du format:
Color1,Color2,Color3,...,Colorn-1,Colorn
Un coût est une chaîne non vide du format:
Cost1,Cost2,Cost3,...,Costn-1,Costn
Exemples
Au format Pool Cost -> ExpectedOutput
(avec un espace entre Pool et Coût):
{R},{R},{G},{B},{R} {4},{R} -> True
{G},{G},{G},{G},{W},{W},{W} {2/W},{2/U},{2/B},{2/R},{2/G} -> False
{G},{G},{R} {R/G},{G/B},{B/R} -> True
{R},{R},{R},{G} {1},{G},{2/G}-> True
{R} {R},{R},{R},{R},{R} -> False
{W},{R},{R} {2/W},{W/B} -> True
{U},{U} {1} -> True
{W},{R},{G} {1},{2} -> True