Em Magic: the Gathering, magos (conhecidos como "planeswalkers") lutam entre si lançando feitiços. Feitiços custam mana. Existem cinco cores de mana: branco, azul, preto, vermelho e verde, representados como {W}, {U}, {B}, {R} e {G}, respectivamente.
O custo de um feitiço é um pouco mais complexo. O custo pode ser qualquer combinação do seguinte:
- Uma ou mais cores
- Um ou mais incolor, representado como {X}, em que X é um número inteiro positivo
- Um ou mais híbridos, representados como {Y / Z}, em que Y e Z são uma cor (representada por uma das cinco letras) ou incolores, representados por um número inteiro positivo
As regras a seguir se aplicam ao tentar lançar um feitiço:
- Uma cor em um custo deve ser satisfeita por um mana dessa cor
- Um custo incolor {X} pode ser satisfeito por X mana de qualquer cor
- Um custo híbrido {Y / Z} pode ser satisfeito satisfazendo Y ou Z
- Observe que chaves não estão aninhadas
- Y e Z não são híbridos
Escreva um programa ou função que, dado um conjunto de mana e um custo, imprima ou retorne verdadeiro (ou algum valor verdadeiro) se e somente se o mana nesse conjunto puder satisfazer o custo, caso contrário, falso (ou algum valor falso).
Um pool de mana é uma sequência não vazia do formato:
Color1,Color2,Color3,...,Colorn-1,Colorn
Um custo é uma sequência não vazia do formato:
Cost1,Cost2,Cost3,...,Costn-1,Costn
Exemplos
No formato Pool Cost -> ExpectedOutput
(com um espaço entre 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