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
la source
Réponses:
Pyth,
55535250 octetsEssayez-le en ligne: démonstration ou test de harnais
Notez que la complexité du temps et de la mémoire est vraiment mauvaise. Le deuxième exemple ne fonctionne donc pas. J'alloue environ 1,6 Go de Ram avant qu'il ne plante sur ma machine.
Explication
L'explication est pour la solution 53. La seule différence est que l'analyse initiale se produit au milieu au lieu du début.
Voici donc l'analyse initiale.
Ainsi, l'entrée
"{W},{R},{R} {2/W},{W/B}"
est convertie en['w,r,r', '2/w,w/b']
.Alors qu'est-ce que cela fait? L'entrée de coût
'2/w,w/b'
est convertie en:Chaque chaîne
['aa', 'ab', 'ac', ..., 'zx', 'zy', 'zz', 'w']
satisfait{2/W}
et chaque caractère'wb'
satisfait{w/b}
.Maintenant, nous générons le produit cartésien de ces listes (ou chaînes) et voyons si une combinaison peut être produite avec le mana-pool.
la source
True
etFalse
.K
. PlacezKc-rz0"{}")
oùK
est utilisé en premier et supprimez l'affectation initiale àK
.Python 2.7, 412 caractères
La fonction
f
est celle qui effectue la vérification. Il prend le pool de mana et le coût comme arguments de chaîne et s'affiche1
lorsque le mana satisfait le coût et0
autrement. Par exemple, desf('{R},{R},{G},{B},{R}', '{4},{R}')
impressions1
.Non golfé, il ressemble essentiellement à ceci
la source