Für mehr MtG-Güte: Magie: Der Sammelkampf mit Fähigkeiten
Prämisse:
In Magic: the Gathering zauberst du Zauber, indem du ihre Manakosten bezahlst, indem du Land für den erforderlichen Betrag tippst. Diese Länder können eine der fünf Farben erzeugen, die sind:
- Weiß (W)
- Blau (U)
- Schwarz (B)
- Rot (R)
- Grün (G)
Die Kosten setzen sich aus zwei Teilen zusammen: einer Zahl, die die allgemeine Manaanforderung darstellt, und einer Reihe von Symbolen, die die farbige Manaanforderung darstellen. Die Zahl gibt die generischen Manakosten an und kann jede Manafarbe verwenden, um sie zu befriedigen, z. B. (3)
kann mit bezahlt werden WGG
. Die Symbole sind eine 1: 1-Anforderung einer bestimmten Farbe. zB WWUBR
würde 2 weißes Mana, 1 blaues, 1 schwarzes und 1 rotes erfordern. Der generische Teil steht immer vor dem farbigen Teil. Zur Erinnerung, (0)
ist eine gültige Kosten und muss behandelt werden.
Sie können Kosten haben, die ganz allgemein oder ganz farbig sind oder beides. Zum Beispiel kostet die folgende Karte 4BB und wird mit 4 farbigen Manas und 2 schwarzen Manas bezahlt:
Länder in dieser Herausforderung produzieren jeweils ein Mana. Wir werden jedoch Länder betrachten, die mehrere Farben erzeugen können, aber dennoch nur 1 Mana liefern. ZB G
erzeugt ein grünes Mana, WG
kann entweder 1 Weiß oder 1 Grün produzieren.
Eingang:
Sie erhalten zwei Eingaben, die Kosten einer Karte und eine Liste der Länder.
Die Kosten der Karte können entweder eine Zeichenfolge oder ein Tupel sein, das eine Zahl und eine Zeichenfolge für den farbigen Teil enthält. Wenn es keinen generischen Teil gibt, können Sie den String / das Tupel mit einer 0 auffüllen.
Die Landliste ist eine Liste von Zeichenfolgen, in denen jede einzelne das ist, was ein bestimmtes Land produzieren kann. Diese Liste kann leer sein (Sie haben kein Land). Sie können dies auch als Liste von Ints mithilfe der Bitmaskenlogik verwenden, aber wenn Sie dies tun, veröffentlichen Sie Ihr Schema. Die Bestellung liegt auch bei Ihnen, wenn es darauf ankommt, andernfalls wird sie in der richtigen WUBRG
Reihenfolge angenommen .
#Example input formats
"4BB", ("WG","B","B") #
(4,"BB"), (7,3,3) #Both should return falsy
Ausgabe:
Ein truthy
Wert, wenn Sie die Kosten für Ihr Land erfolgreich bezahlen können, und ein falsey
Wert, wenn Sie dies nicht können.
Regeln:
- Ihnen wird eine gültige Eingabe garantiert
- Mana wird immer in der Reihenfolge "WUBRG" angenommen. Wenn Sie eine andere Reihenfolge wünschen, geben Sie dies in Ihrer Antwort an.
- Farben werden immer in den Kosten gruppiert, zB "WWUBBRG"
- Bei der Eingabe werden entweder Großbuchstaben oder Kleinbuchstaben Ihrer Wahl verwendet.
- Sie sollten in der Lage sein, mit Regex
127[WUBRG]{127}
und 254 Ländern umzugehen . - Standardlücken verboten
- Dies ist Code-Golf , die kürzeste Antwort pro Sprache gewinnt
Beispiele:
"0", ("") => 1
"1BB", ("WG","B","B") => 1
"BB", ("WG","B","B") => 1
"WB", ("WG","B","B") => 1
"1UB", ("W","U","B") => 1
"1BB", ("WB","WB","WG") => 1
"1", ("WG","B","B") => 1
"1BB", ("WGR","WB","WB") => 1
"WUBRG", ("W","U","B","R","G") => 1
"1WWUBB", ("W","WG","U","B","B","R") => 1
"10BB", ("WGR","WB","WB","B","B","B","B","B","B","B","B","B") => 1
"R", ("") => 0
"4", ("WG","B","B") => 0
"1BB", ("WG","WB") => 0
"1UB", ("WG","W","UB") => 0
"1UBR", ("W","WG","UBR") => 0
"WUBRG", ("WUBRG") => 0
"1WWUBB", ("W","WG","U","B","B") => 0
"10UU", ("WGR","WB","WB","B","B","B","B","B","B","B","B","B") => 0
quelle
Antworten:
JavaScript (ES6), 91 Byte
Nimmt Eingabe als
(cost)(lands)
:BGRUW
Probieren Sie es online aus!
Kommentiert
quelle
Python 2 ,
131129 BytesProbieren Sie es online aus!
quelle
Netzhaut , 60 Bytes
Probieren Sie es online aus! Link enthält Testfälle. Erläuterung:
Wandle das generische Mana in unär um. Dies verwendet wiederholte
_
s.Passen Sie alle Zeilen nach der ersten an, dh die Liste der Länder. (Dies würde normalerweise am Ende der Eingabe wieder übereinstimmen, aber das Aussehen verhindert dies.)
Erfassen Sie die 1-indizierte Zeilennummer in
$#1
.Ersetzen Sie jedes Land durch einen regulären Ausdruck, der die Kosten erfasst, die diesem Land entsprechen, oder generische Kosten, jedoch nur einmal.
Verbinden Sie die resultierenden regulären Ausdrücke mit
|
s.Wickeln Sie den regulären Ausdruck in
^(
und ein)*\n
(ich kann hier scheinbar keinen einfügen¶
).Zählen Sie die Anzahl der Übereinstimmungen dieser Regex mit dem aktuellen Wert.
Beispiel: Für den Fall des
1BB¶WB¶WB¶WG
generierten regulären Ausdrucks gilt:welches
_BB¶WB¶WB¶WG
nach Bedarf passt.quelle
WUBRG, WUBRG
sollte zurückkehrentrue
?WUBRG
.Gelee , 21 Bytes
Probieren Sie es online aus!
Ausgänge
Das Eingabeformat macht es Jelly wirklich schwer. Weil
Ṫ
undḢ
modifizieren Sie das Array, müssen wir©
und®
zusätzlich verwenden. Bei 3 separaten Eingängen wären dies 18 Bytes . (Obwohl ich sicher bin, dass es eine 14-Byte-Lösung gibt, die darauf wartet, von einem der Jelly-Masterminds veröffentlicht zu werden.)quelle
Pyth , 25 Bytes
Probieren Sie es online aus!
Wenn Pyth eine "Cartesian Product of Array" -Funktion wie die von Jelly hätte
Œp
, würde dies meine Jelly-Lösung leicht übertreffen. Derzeit wird das von erledigtusM*GHQ]k
.quelle
Perl 6 ,
5646 BytesProbieren Sie es online aus!
Curry-Funktion. Nimmt Eingaben wie
(@lands)($generic_cost, $colored_costs)
bei einer expliziten 0 für allgemeine Kosten vor. Die Grundidee besteht darin, ein neues Symbol1
für generisches Mana einzuführen und mithilfe von Perl 6-Beuteln (Multisets) zu prüfen, ob es möglich ist, das erforderliche Mana aus Ländern zu erhalten.Erläuterung
quelle
Haskell , 94 Bytes
Probieren Sie es online aus!
Wir verlassen uns darauf, dass alle Farben in der gleichen Reihenfolge in den Kosten und in der Landliste angegeben werden. Zuerst tippen wir auf die Länder, die das erforderliche farbige Mana ergeben, und überprüfen anschließend, ob wir noch genügend Länder haben, um die farblosen Kosten zu bezahlen.
quelle