Para mais bondade no MtG: Magic: The Gathering Combat with Habilidades
Premissa:
Em Magic: the Gathering, você lança feitiços pagando seu custo de mana tocando em terrenos pelo valor necessário. Essas terras podem produzir uma das cinco cores que são:
- Branco (W)
- Azul (U)
- Preto (B)
- Vermelho (R)
- Verde (G)
O custo é composto de duas partes: um número que é o requisito genérico de mana e uma série de símbolos que representam o requisito de mana colorido. O número é o custo genérico de mana e pode usar qualquer cor de mana para satisfazê-lo, por exemplo, (3)
pode ser pago com ele WGG
. Os símbolos são um requisito 1: 1 de uma cor específica. por exemplo WWUBR
, exigiria 2 mana branco, 1 azul, 1 preto e 1 vermelho. A parte genérica sempre será anterior à parte colorida. Como lembrete, (0)
é um custo válido e deve ser tratado.
Você pode ter custos que são totalmente genéricos, ou totalmente coloridos, ou ambos. Por exemplo, o cartão a seguir tem um custo de 4BB e é pago com 4 de qualquer mana colorido e 2 mana preto:
As terras deste desafio produzirão uma mana. No entanto, consideraremos terrenos que podem produzir várias cores, mas que ainda produzem apenas 1 mana. Por exemplo G
, produzirá uma mana verde, WG
pode produzir 1 branco ou 1 verde.
Entrada:
Você receberá duas entradas, o custo de um cartão e uma lista de terrenos.
O custo do cartão pode ser uma sequência ou uma tupla contendo um número e uma sequência para a parte colorida. Se não houver uma peça genérica, você pode preencher a string / tupla com um 0.
A lista de terrenos será uma lista de cadeias de caracteres onde cada um é o que um determinado terreno pode produzir. Esta lista pode estar vazia (você não tem terrenos). Você também pode considerar isso como uma lista de entradas usando a lógica de máscara de bits, mas postar seu esquema, se o fizer. O pedido também depende de você, se for importante, caso contrário, será assumido em WUBRG
ordem.
#Example input formats
"4BB", ("WG","B","B") #
(4,"BB"), (7,3,3) #Both should return falsy
Resultado:
Um truthy
valor se você puder pagar com sucesso o custo dado suas terras e um falsey
valor se você não puder.
Regras:
- Você terá entrada válida garantida
- Presume-se que a mana esteja sempre na ordem "WUBRG". Se você deseja uma ordem diferente, informe-o na sua resposta.
- As cores sempre serão agrupadas no custo, por exemplo, "WWUBBRG"
- A entrada usará todas as maiúsculas ou minúsculas, sua escolha.
- Você deve ser capaz de lidar com regex
127[WUBRG]{127}
e 254 terrenos. - Lacunas padrão proibidas
- Isso é código-golfe , a resposta mais curta por idioma ganha
Exemplos:
"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
fonte
Respostas:
JavaScript (ES6), 91 bytes
Toma entrada como
(cost)(lands)
:BGRUW
Experimente online!
Comentado
fonte
Python 2 ,
131129 bytesExperimente online!
fonte
Retina , 60 bytes
Experimente online! O link inclui casos de teste. Explicação:
Converta o mana genérico em unário. Isso usa
_
s repetidos .Combine todas as linhas após a primeira, ou seja, a lista de terrenos. (Isso normalmente corresponderia novamente no final da entrada, mas a aparência por trás impede isso.)
Capture o número da linha indexada em 1
$#1
.Substitua cada terreno por um regex que captura os custos correspondentes a esse terreno ou custos genéricos, mas apenas uma vez.
Associe as expressões regulares resultantes com
|
s.Envolva o regex
^(
e)*\n
(não consigo inserir um¶
aqui).Conte o número de correspondências dessa regex no valor atual.
Exemplo: Para o caso do
1BB¶WB¶WB¶WG
regex gerado, é:que
_BB¶WB¶WB¶WG
corresponde conforme necessário.fonte
WUBRG, WUBRG
deve voltartrue
?WUBRG
.Geléia , 21 bytes
Experimente online!
Saídas
O formato de entrada é o que realmente torna isso difícil para o Jelly. Porque
Ṫ
eḢ
modificar a matriz, precisamos usar©
e®
além disso. Com 3 entradas separadas, isso seria 18 bytes . (Embora eu tenha certeza de que há uma solução de 14 bytes aguardando para ser publicada por um dos mentores do Jelly.)fonte
Pitão , 25 bytes
Experimente online!
Se Pyth tivesse uma função "produto cartesiano de matriz" como a de Jelly
Œp
, isso facilmente venceria minha solução de Jelly. Atualmente isso é feito porusM*GHQ]k
.fonte
Perl 6 ,
5646 bytesExperimente online!
Função ao curry. Recebe entrada como
(@lands)($generic_cost, $colored_costs)
um 0 explícito para custo genérico. A idéia básica é introduzir um novo símbolo1
representando mana genérico e usar Perl 6 Bags (multisets) para verificar se é possível obter o mana necessário das terras.Explicação
fonte
Haskell , 94 bytes
Experimente online!
Contamos com o fato de que todas as cores serão fornecidas na mesma ordem no custo e na lista de terrenos. Primeiro, tocamos as terras dando a mana colorida necessária e depois verificamos se ainda temos terras suficientes para pagar o custo incolor.
fonte