Para obtener más bondad de MtG: Magic: The Gathering Combat with Habilities
Premisa:
En Magic: the Gathering, lanzas hechizos pagando su costo de maná tocando tierras por la cantidad requerida. Estas tierras pueden producir uno de los cinco colores que son:
- Blanco (W)
- Azul (U)
- Negro (B)
- Rojo (R)
- Verde (G)
El costo se compone de dos partes: un número que es el requisito de maná genérico y una serie de símbolos que representan el requisito de maná de color. El número es el costo de maná genérico y puede usar cualquier color de maná para satisfacerlo, por ejemplo, (3)
se puede pagar WGG
. Los símbolos son un requisito 1: 1 de un color específico. por ejemplo WWUBR
, requeriría 2 maná blanco, 1 azul, 1 negro y 1 rojo. La parte genérica siempre vendrá antes que la parte coloreada. Como recordatorio, (0)
es un costo válido y debe ser manejado.
Puede tener costos que sean completamente genéricos, o completamente coloreados, o ambos. Por ejemplo, la siguiente carta tiene un costo de 4BB y se paga con 4 de cualquier maná de color y 2 de maná negro:
Las tierras en este desafío producirán cada una un maná. Sin embargo, consideraremos tierras que pueden producir múltiples colores pero que solo producen 1 maná. Por ejemplo G
, producirá un maná verde, WG
puede producir 1 blanco o 1 verde.
Entrada:
Se le darán dos entradas, el costo de una tarjeta y una lista de tierras.
El costo de la tarjeta puede ser una cadena o una tupla que contiene un número y una cadena para la parte coloreada. Si no hay una parte genérica, puede rellenar la cadena / tupla con un 0.
La lista de tierras será una lista de cadenas donde cada una es lo que puede producir una tierra determinada. Esta lista puede estar vacía (no tienes tierras). También puede tomar esto como una lista de entradas usando la lógica de máscara de bits, pero publique su esquema si lo hace. El orden también depende de usted si es importante, de lo contrario se supondrá en WUBRG
orden.
#Example input formats
"4BB", ("WG","B","B") #
(4,"BB"), (7,3,3) #Both should return falsy
Salida:
Un truthy
valor si puede pagar con éxito el costo dado sus tierras y un falsey
valor si no puede.
Reglas:
- Se le garantizará una entrada válida
- Se supondrá que Mana siempre estará en el orden "WUBRG". Si desea un orden diferente, indíquelo en su respuesta.
- Los colores siempre se agruparán en el costo, por ejemplo, "WWUBBRG"
- La entrada utilizará todas las mayúsculas o todas las minúsculas, a su elección.
- Deberías poder manejar expresiones regulares
127[WUBRG]{127}
y 254 tierras. - Lagunas estándar prohibidas
- Este es el código de golf , la respuesta más corta por idioma gana
Ejemplos:
"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
fuente
Respuestas:
JavaScript (ES6), 91 bytes
Toma entrada como
(cost)(lands)
:BGRUW
Pruébalo en línea!
Comentado
fuente
Python 2 ,
131129 bytesPruébalo en línea!
fuente
Retina , 60 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Convierte el maná genérico en unario. Esto utiliza repetidos
_
s.Haga coincidir todas las líneas después de la primera, es decir, la lista de tierras. (Esto normalmente volvería a coincidir al final de la entrada, pero el mirar hacia atrás lo impide).
Capture el número de línea indexada 1 en
$#1
.Reemplace cada tierra con una expresión regular que capture los costos que coincidan con esa tierra o los costos genéricos, pero solo una vez.
Unir las expresiones regulares resultantes con
|
s.Envuelva la expresión regular
^(
y)*\n
(parece que no puedo insertar un¶
aquí).Cuente el número de coincidencias de esa expresión regular en el valor actual.
Ejemplo: para el caso de
1BB¶WB¶WB¶WG
la expresión regular generada es:que
_BB¶WB¶WB¶WG
coincide según lo requerido.fuente
WUBRG, WUBRG
debería volvertrue
?WUBRG
.Jalea , 21 bytes
Pruébalo en línea!
Salidas
El formato de entrada es lo que realmente hace que esto sea difícil para Jelly. Porque
Ṫ
yḢ
modificar la matriz, necesitamos usar©
y®
además. Con 3 entradas separadas esto sería 18 bytes . (Aunque estoy seguro de que hay una solución de aproximadamente 14 bytes esperando ser publicada por uno de los autores intelectuales de Jelly).fuente
Pyth , 25 bytes
Pruébalo en línea!
Si Pyth tuviera una función de "producto cartesiano de matriz" como la de Jelly
Œp
, esto superaría fácilmente a mi solución Jelly. Actualmente eso lo haceusM*GHQ]k
.fuente
Perl 6 ,
5646 bytesPruébalo en línea!
Función curry Toma datos como
(@lands)($generic_cost, $colored_costs)
con un 0 explícito para el costo genérico. La idea básica es introducir un nuevo símbolo que1
represente el maná genérico y usar Perl 6 bolsas (multisets) para verificar si es posible obtener el maná requerido de las tierras.Explicación
fuente
Haskell , 94 bytes
Pruébalo en línea!
Confiamos en el hecho de que todos los colores se darán en el mismo orden en el costo y en la lista de terrenos. Primero tocamos las tierras dando el maná de color requerido y después de eso solo verificamos que todavía tenemos suficientes tierras para pagar el costo incoloro.
fuente