En el juego de cartas Magic: the Gathering hay cinco colores diferentes, que representan afiliaciones sueltas de cartas, Blanco ( W
), Azul ( U
), Negro ( B
), Rojo ( R
) y Verde ( G
). A menudo se organizan en un pentágono de la siguiente manera:
W
G U
R B
Tanto en la tradición de MtG como en muchas mecánicas de cartas, los colores adyacentes en este pentágono generalmente se consideran aliados, y los colores no adyacentes (más o menos opuestos) se consideran enemigos.
En este desafío, se te darán dos colores y deberías determinar su relación.
El reto
Te dan dos caracteres distintos del conjunto BGRUW
. Puede tomarlos como una cadena de dos caracteres, una cadena con un delimitador entre los caracteres, dos valores de caracteres separados, dos cadenas de un solo tono, dos enteros que representan sus puntos de código o una lista o tipo de conjunto que contiene dos caracteres / cadenas / enteros.
Su salida debe ser uno de los dos valores distintos y consistentes de su elección, uno que indique que los dos colores son aliados y otro que indique que son enemigos. Uno de esos dos valores puede no tener salida.
Puede escribir un programa o una función y utilizar cualquiera de nuestros métodos estándar para recibir entradas y proporcionar salidas.
Puede usar cualquier lenguaje de programación , pero tenga en cuenta que estas lagunas están prohibidas de forma predeterminada.
Este es el código de golf , por lo que gana la respuesta válida más corta, medida en bytes .
Casos de prueba
Solo hay 20 entradas posibles, así que las enumeraré todas.
Amigos:
WU UB BR RG GW UW BU RB GR WG
Enemigos:
WB UR BG RW GU BW RU GB WR UG
fuente
Respuestas:
JavaScript (ES6),
26 23 17 1514 bytesToma datos como dos códigos ASCII en la sintaxis de curry
(a)(b)
. Devoluciones4
para amigos o0
para enemigos.Pruébalo en línea!
¿Cómo?
NB: solo se muestra a continuación el cociente entero de la división por 0.6.
Enfoque anterior, 15 bytes
Toma datos como dos códigos ASCII en la sintaxis de curry
(a)(b)
. Devoluciones0
para amigos o1
para enemigos.Pruébalo en línea!
¿Cómo?
Enfoque inicial, 23 bytes
Toma la entrada como una cadena de 2 caracteres. Devoluciones
true
para amigos ofalse
para enemigos.Pruébalo en línea!
fuente
a*b%290&8
funcionaría igual de bien (produciendo0
para amigos o8
para enemigos).Jalea , 6 bytes
Toma dos puntos de código como argumento. Rinde 1 para amigos, 0 para enemigos.
Pruébalo en línea!
Antecedentes
Deje n y m ser los puntos de código de dos caracteres de entrada. Al tomar | n - m | , solo debemos ocuparnos de todas las 2 combinaciones de caracteres. La siguiente tabla muestra todas las combinaciones de 2 caracteres de las diferencias absolutas correspondientes.
Todos enemigo combinaciones son divisibles por 3 , 5 o 7 , pero ninguno de los amigos combinaciones de estos, por lo que los amigos son exactamente los que están co-prime con 3 x 5 x 7 = 105 .
Cómo funciona
fuente
_
es gelatina. ¿Usaste algo más?ạ
como valor absoluto, no como diferencia absoluta.Python 2 , 19 bytes
Pruébalo en línea!
Una función anónima: regresa
1
para amigos y0
enemigos.fuente
Befunge-98,
1312 bytesPruébalo en línea!
Impresiones
0
para amigos y1
enemigos.Esto usa la diferencia entre los valores ASCII de las letras.
Si tomamos el
(((ASCII difference % 9) % 5) % 3)
, los valores para los enemigos serán 0. Entonces, no tomamos el valor y lo imprimimos.Gracias a @ Martin por el golf
fuente
IA%9%5%3¬
Editar ¡ Pruébelo en línea!Jalea ,
87 bytes¡Aprovecha la fabulosa respuesta Befunge de Mistah Figgins !
Pruébalo en línea!
¿Cómo?
Como señaló Mistah Figgins, la decisión se puede tomar tomando la diferencia absoluta entre los valores ASCII mod 9 mod 5 mod 3 - 0s son amigos y 1s y 2s son enemigos.
Si en cambio tomamos la diferencia (simple) mod 9, encontramos que los amigos son 1s, 2s, 7s y 8s, mientras que los enemigos son 3s, 4s, 5s y 6s.
El código toma la diferencia con
I
y luego índices en la lista de longitud 9[1,1,0,0,0,0,1,1,0]
, que es 390 en binario,390B
. La indexación es tanto modular (de manera tan efectiva que realiza el mod 9 de forma gratuita) y basada en 1 (de ahí el 1 a la izquierda).fuente
Metaprogramación de plantilla C ++, 85 bytes
menos golf:
Como se trata de un lenguaje de metaprogramación, una compilación de compilación o no es una salida posible.
Una instancia de
f<'W','B'>
compilaciones si y solo si'W'
y'B'
son enemigos.Matemáticas basadas en la respuesta Befunge .
Ejemplo en vivo .
Como la metaprogramación de plantillas C ++ es uno de los peores lenguajes de golf, cualquiera que sea peor que esto debería sentirse avergonzado. ;)
fuente
template
s.Ruby,
2219 bytesEntrada: código ASCII de los 2 caracteres. Salida: 1 para aliados, 0 para enemigos.
Cómo funciona:
Obtenga la diferencia entre los 2 números del módulo 9, use una máscara de bits (390 es binario 110000110) y obtenga un solo bit con el
[]
operador.fuente
->x,y{x*y%103%2}
cuenta que0
y1
se invierten.x*y%51>9
como todos los demás. Creo que sería injusto para los votos positivos cambiarlo tan radicalmente ahora.CJam , 8 bytes
Un bloque sin nombre que espera dos códigos de caracteres en la parte superior de la pila y los reemplaza con
0
(amigos) o1
(enemigos).Pruébalo en línea!
Explicación
Bueno, hemos visto muchas soluciones aritméticas divertidas ahora, así que supongo que está bien si presento la mía ahora. Lo más cercano a esto que he visto hasta ahora es la solución C de Steadybox . Este fue encontrado con la ayuda de un forzador bruto de GolfScript que escribí hace algún tiempo para anarchy golf.
Esto es lo que este le hace a las diversas entradas (ignorando el orden, porque la multiplicación inicial es conmutativa):
Podemos ver cómo tomar el producto de las entradas del módulo 51 separa bien las entradas en resultados grandes y pequeños, y podemos usar cualquiera de los valores intermedios para distinguir entre los dos casos.
fuente
Röda ,
302221 bytesBytes guardados gracias a @fergusq al usar
_
para tomar los valores en la secuencia como entradaPruébalo en línea!
La función se ejecuta como
push "WU" | f
después de asignar un nombre a la función.Explicación
fuente
{[(_.._)in"WUBRGWGRBUW"]}
pero entonces la función debe llamarse como[a, b] | f
.05AB1E , 10 bytes
Devuelve 0 para amigo y 1 para enemigo.
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
C,
3332292422 bytesDevuelve 1 si son amigos, 0 si son enemigos.
fuente
Vim,
2221 bytesEntrada: una sola línea que contiene los dos caracteres.
Salida: búfer vacío si amigos, búfer que contiene
WUBRGWGRBUW
si enemigos.Explicación
fuente
C
lugar decw
Japt , 6 bytes
Inspirado en la solución de @Martin Ender .
Toma una matriz de dos códigos char como entrada.
Pruébalo en línea! El | Banco de pruebas
Devoluciones
true
para amigos,false
para enemigos.Solución de 14 bytes:
Toma dos códigos char como entrada
Pruébalo en línea! El | Banco de pruebas
Explicación:
Solución de 12 bytes:
Pruébalo en línea! El | Banco de pruebas
Explicación:
Devoluciones
1
para amigos y0
enemigos.Solución de 9 bytes :
Inspirado en la solución de @ Arnauld .
Banco de pruebas
Devoluciones
1
para amigos,0
para enemigos.Solución de 11 bytes:
inspirado en la solución de @Mistah Figgins .
Banco de pruebas
fuente
Brain-Flak ,
155, 147, 135 bytesPruébalo en línea!
Esto es 134 bytes de código más una penalización de byte para el
-a
indicador que permite la entrada ASCII.Esto funciona al encontrar la diferencia absoluta entre las entradas y verificar si son iguales a 2, 11, 16 o 19. Si lo hace, la entrada es un amigo e imprime un 1. Si no lo es, no imprime nada. Como nada en brain-flak corresponde a una pila vacía, lo cual es falso, ninguna salida es un valor falso. ( meta )
Una cosa que me gusta especialmente de esta respuesta es que el fragmento de "diferencia absoluta" (es decir,
(([(({}[{}]))<>])){({}())<>}{}{}<>{}
) no está limpio de pila, pero aún puede usarse en esta respuesta ya que no nos importa en qué pila terminamos antes de codificar Las posibles diferencias.En una edición posterior, aproveché esto aún más al abusar de las sobras en la pila que no termina con la diferencia absoluta. En la primera revisión, los saqué a ambos para mantenerlo un poco más cuerdo. No hacer esto da dos grandes campos de golf:
Obviamente, elimina el código para hacerlos explotar:
{}{}
pero, lo que es más importante:Nos permite comprimir la
2, 11, 16, 19
secuencia dea
Afortunadamente, no se necesita código adicional para manejar estas sobras más adelante, por lo que solo se dejan en la pila alternativa.
Como Brain Flak es notoriamente difícil de entender, aquí hay una versión legible / comentada:
fuente
Jalea , 14 bytes
Devoluciones
1
para enemigos y0
amigos.Test suite en Pruébelo en línea!
¿Cómo?
fuente
05AB1E , 7 bytes
Este es un puerto de mi respuesta Jelly . Toma una lista de puntos de código como entrada. Imprime 1 para amigos, 0 para enemigos.
Pruébalo en línea!
Cómo funciona
fuente
CJam ,
16121110 bytesGolfó 4 bytes usando el algoritmo de Mistah Figgins
Guardado 1 byte gracias a Lynn
Salidas
1
para colores enemigos,0
para colores aliados.Pruébalo en línea! (O verificar todos los casos de prueba )
Explicación
fuente
l:m9%5%3%!
Es un byte más corto.Retina , 18 bytes
Pruébalo en línea!
Muy sencillo: ordena la entrada e intenta hacer coincidir cualquiera de los pares de aliados ordenados contra ella. Desafortunadamente, no creo que la naturaleza basada en cadenas de Retina permita que ninguno de los enfoques más interesantes sea competitivo.
Como adelanto de la próxima versión de Retina, planeo agregar una opción que intercambie la expresión regular y la cadena de destino (por lo que la cadena actual se usará como expresión regular y le dará una cadena para verificar), en cuyo caso este es más corto la solución funcionará (o algo por el estilo):
fuente
Java (OpenJDK 8) ,
2823 bytes-5 bytes gracias a fergusq
Pruébalo en línea!
fuente
"WUBRGWGRBUW"::contains
?Brachylog , 10 bytes
Una solución sencilla, sin trucos involucrados.
Pruébalo en línea!
Explicación
fuente
Jalea , 6 bytes
Por el bien de la integridad. Toma dos puntos de código como argumento. Rinde 0 para amigos, 1 para enemigos.
Pruébalo en línea!
Antecedentes
Deje n y m ser los puntos de código de dos caracteres de entrada. Al tomar | n - m | , solo debemos ocuparnos de todas las 2 combinaciones de caracteres. La siguiente tabla muestra todas las combinaciones de 2 caracteres de las diferencias absolutas correspondientes.
Si dividimos estos enteros por 3 , obtenemos los siguientes cocientes.
1 , 4 y 7 pueden asignarse a 1 tomando los resultados del módulo 3 .
Ahora solo tenemos que mirar la paridad.
Cómo funciona
fuente
Cubix, 11 bytes
Una implementación de Cubix de la solución de Arnauld.
Uso
Ingrese los dos caracteres, y sale
0
para amigos y1
enemigos. Pruébalo aquí.Explicación
El código se puede expandir así.
Los caracteres se ejecutan en este orden (excluyendo el flujo de control):
fuente
Python 2 , 26 bytes
Pruébalo en línea!
fuente
AWK, 23 bytes
Ejemplo de uso: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB
Esto se imprime
1
si la pareja es un amigo, de lo0
contrario. Quería hacer algo inteligente, pero todo lo que pensaba sería más largo.fuente
Jalea , 12 bytes
Salidas
1
para aliados,0
para enemigos.Pruébalo en línea!
Explicación
fuente
Rubí, 28 bytes.
Salidas verdadero para amigo, falso para enemigo:
La versión sin golf no es muy diferente:
fuente
05AB1E , 7 bytes
Adaptación del truco mod de la respuesta de Jonathan Jelly
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
GolfScript , 7 bytes
Toma dos puntos de código como entrada.
Pruébalo en línea! (Conjunto de pruebas que convierte el formato de entrada para mayor comodidad).
Un puerto GolfScript de mi respuesta CJam (que técnicamente es un puerto CJam del resultado de mi fuerza bruta GolfScript ... uhhh ...).
Sin embargo, dado que GolfScript obtiene un módulo con entradas negativas correctas, hay una solución alternativa divertida en el mismo conteo de bytes que usa
4
para enemigos en lugar de1
:Pruébalo en línea!
fuente
Java 7, 38 bytes
El puerto de la respuesta Befunge-98 de @Mistah Figgins es el más corto en Java 7 de las respuestas publicadas hasta ahora.
En cuanto a los demás:
39 bytes: puerto de la respuesta de JavaScript de @Arnauld (ES6) .
39 bytes: puerto desde @MartinEnder Cjam respuesta 's
47 bytes: puerto de la respuesta C de @Steadybox
52 bytes: puerto de la respuesta Python 2 de @Lynn
NOTA: Se omitieron las respuestas que usan primos / palíndromos y similares, ya que en Java no se encuentran muy lejos. ;)
TODO: Propongo mi propia respuesta ... Aunque dudo que sea más corta que la mayoría de estas.Intenta todo aquí.
EDITAR: Ok, se me ocurrió algo que no está tan mal:
50 bytes:
Explicación:
Todos los enemigos están en el rango 4-6 (inclusive) o en 0.
EDIT2: Hmm .. Acabo de notar que es muy similar a la respuesta de @Steadybox ':(
fuente
PHP, 31 bytes
Corre con
echo AB | php -nR '<code>
, dondeA
yB
son los dos colores.strtr
devuelve la cadena desde la posición donde se encuentra la entrada;con
WBGURWRUGBW
como pajar, esto devuelve una cadena verdadera si los colores son enemigos; cadena vacía si no.!
convierte la cadena verdadera enfalse
, dando como resultado una salida vacíay la cadena vacía en
true
, dando como resultado la salida1
.fuente