In Magic: the Gathering, i maghi (noti come "planeswalker") si combattono lanciando incantesimi. Gli incantesimi costano mana. Esistono cinque colori di mana: bianco, blu, nero, rosso e verde, rappresentati rispettivamente come {W}, {U}, {B}, {R} e {G}.
Il costo di un incantesimo è leggermente più complesso. Il costo può essere qualsiasi combinazione di quanto segue:
- Uno o più colori
- Uno o più incolori, rappresentato come {X}, dove X è un numero intero positivo
- Uno o più ibridi, rappresentati come {Y / Z}, dove Y e Z sono o un colore (rappresentato da una delle cinque lettere) o incolore, rappresentato da un numero intero positivo
Le seguenti regole si applicano quando si tenta di lanciare un incantesimo:
- Un colore in un costo deve essere soddisfatto da un mana di quel colore
- Un costo incolore {X} può essere soddisfatto da X mana di qualsiasi colore
- Un costo ibrido {Y / Z} può essere soddisfatto soddisfacendo Y o Z
- Si noti che le parentesi graffe non sono nidificate
- Y e Z non sono ibridi
Scrivi un programma o una funzione che, dati un pool di mana e un costo, stampa o restituisce true (o un valore di verità) se e solo se il mana in quel pool può soddisfare il costo, altrimenti false (o un valore di falsa).
Un pool di mana è una stringa non vuota del formato:
Color1,Color2,Color3,...,Colorn-1,Colorn
Un costo è una stringa non vuota del formato:
Cost1,Cost2,Cost3,...,Costn-1,Costn
Esempi
Nel formato Pool Cost -> ExpectedOutput
(con uno spazio tra Pool e Cost):
{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