Dadas dos cadenas, encuentre la tabla de traducción ( cifrado de sustitución ) entre las dos, si la traducción no es posible, la salida es falsa. La respuesta debe minimizarse y crearse de izquierda a derecha. El primer carácter a traducir entre palabras debe ser el primero en la tabla de traducción. Además de esto, cualquier carta que no esté traducida (en el mismo lugar que estaba originalmente), NO debe estar en la tabla de traducción.
Probablemente más fácilmente definido a través de ejemplos:
Casos Válidos
"bat", "sap" => ["bt","sp"]
Observe el pedido, una salida de ["tb","ps"]
no es válida para este desafío.
"sense", "12n12" => ["se","12"]
Observe cómo n
no se traduce porque es una relación 1 a 1.
"rabid", "snail" => ["rabd","snal"]
Observe cómo i
no se traduce porque es una relación 1 a 1.
"ass", "all" => ["s","l"]
A no está incluido, permanece igual, se s
puede asignar l
debido a la coincidencia de patrón.
"3121212", "ABLBLBL" => ["312","ABL"]
Combina perfectamente con el patrón.
Falsy Cases
"banana", "angular" => false
(No es de la misma longitud, imposible).
"animal", "snails" => false
(cada carácter solo se puede usar UNA VEZ en cada lado de la traducción).
"can","cnn" => false
(n se usa implícitamente en la traducción, por lo tanto, definir una tabla de traducción con n-> a no sería válido)
Por lo tanto, [aimal,sails]
es una respuesta no válida, lo que hace que esto sea falso.
"a1", "22" => false
Ver "advertencias", esto aparece como falso. En este caso, es porque a
y 1
no se pueden asignar a ambos 2
. (Cada carácter solo se puede usar UNA VEZ en cada lado de la traducción).
Esta respuesta parece ser un buen punto de referencia: /codegolf//a/116807/59376
Si tiene preguntas sobre la funcionalidad de dos pares de palabras que no figuran en la lista, consulte esta implementación.
Reglas de E / S
- La entrada puede ser como una matriz de 2 elementos o como 2 entradas separadas.
- La salida puede ser como una matriz o nueva línea / espacio delimitado, similar a como lo he mostrado.
- La salida falsa puede ser 0, -1 o falsa. La salida de error / vacío también está bien.
- Le garantizamos que
a
no será igualb
y quea
tampocob
estará vacío. a
yb
son secuencias de letras imprimibles solo en ASCII.
Advertencias
- Las traducciones deben ocurrir de izquierda a derecha, ver ejemplo 1.
- No debe generar caracteres que sigan siendo los mismos.
- Su programa solo puede tomar dos cadenas
a
yb
. - Cada carácter solo se puede usar UNA VEZ en cada lado de la traducción. Esto es lo que hace la traducción de
snails
aanimals
imposible. - Los reemplazos recursivos no deberían ocurrir. Ejemplo de reemplazo recursivo:
"a1","22"->[a1,12]
donde a se reemplaza primero por 1, luego los 1 resultantes se reemplazan por 2. Esto no es correcto, suponga que todas las traducciones ocurren independientemente unas de otras, lo que significa que esto es falso. Significado: "a1" con la tabla de traducción de [a1,12] se evalúa a 12 (no 22)
fuente
Respuestas:
JavaScript (ES6), 128 bytes
fuente
ass
yall
debería sers,l
.JavaScript (ES6),
108107105106 bytesEditar :
"22" / "a1"
se corrigió para admitir entradas como esa que deberían ser falsas.Devuelve una
0
o una matriz de dos cadenas.Formateado y comentado
Casos de prueba
Mostrar fragmento de código
fuente
f('22')('a1')
debería ser falso también.PHP> = 7.1, 130 bytes
18 bytes guardados por @Titus
Casos de prueba
Expandido
PHP> = 7.1, 148 bytes
imprime 0 para falso Salida verdadera como cadena
Casos de prueba
Expandido
PHP> = 7.1, 131 bytes
La segunda respuesta se puede acortar a esto si se permiten matrices asociativas
imprime 0 para falso Salida verdadero como matriz asociativa en lugar de cadena
Casos de prueba
PHP> = 7.1, 227 bytes
imprime 0 para falso
Casos de prueba
Expandido
fuente
array_values()
dentrojoin()
es completamente inútil y puede descartarse.a1 22 => false
caso de prueba. Además, su primer programa no parece funcionar en el probador en línea.($p=$x[$i])==$o?:$k[$c[$p]=$o]=$p;
en el bucle y$y==strtr($x,$c)
para la primera prueba.Jalea , 18 bytes
Enlace monádico sin nombre (función de una entrada) tomando una lista, que devuelve:
una lista vacía en los casos de falsey; o
una lista que contiene dos listas de caracteres en los casos verdaderos.
Pruébalo en línea! (el pie de página divide la lista con un espacio para evitar imprimir una representación borrosa)
... o vea un conjunto de pruebas .
¿Cómo?
fuente
Retina ,
194191185229225241 bytesPruébalo en línea!
Toma entrada
;
separada. La salida es también;
separada. Las entradas falsas se representan con salidas vacías.Sé que esto es dolorosamente detallado, todavía estoy tratando de reducir bytes. La mayoría de estos bytes van a eliminar entradas falsas.
Ediciones
Resulta que tuve un defecto significativo con mi programa. Ahora está arreglado, pero a un costo de más de 40 bytes.
Se encontró otro error donde mi programa no declaró la entrada
a1;22
falsa, pero pude mantener el programa por debajo de 250 bytes después de arreglarloExplicación
(una explicación más detallada vendrá en breve)
Primero tenemos que verificar si las longitudes de las cadenas
a
yb
son iguales o no. Si no lo están, eliminamos todo.Duplica la entrada para preservarla mientras hacemos algunas pruebas de longitud.
Ahora en un bucle, eliminamos el primer carácter de
a
y el primer carácter deb
hasta que una de las cadenas quede vacía.Ahora hay posibilidades para el "espacio de patrones".
;;abc
Ambas cuerdas son de igual longituddef;;abc
a
es más largo queb
;def;abc
b
es más largo quea
Ahora tenemos que vaciar la entrada si las cadenas no tienen la misma longitud (escenarios 2 y 3). Esto es lo que hace esta sustitución a continuación. Elimina el texto que coincide con los escenarios 2 y 3.
Esto elimina los caracteres que no se transcriben en cadenas
a
yb
.abc;1b2
=>ac;12
Después de eso, tenemos que eliminar los caracteres duplicados.
sese;1212
=>se;12
, pero esto conserva entradas comoaba;123
Finalmente, eliminamos la entrada si hay caracteres duplicados que se asignan a diferentes caracteres como
aba;123
oa1;22
.Y finalmente, elimine los caracteres duplicados.
fuente
(?(1)(?!))
que aprendí de tu respuesta :);
.Jalea ,
2826 bytesPruébalo en línea!
fuente
Rubí, 133 bytes
Pruébalo en línea!
Más legible:
Solo por diversión, aquí hay una versión de 84 bytes en Goruby, que es Ruby, pero con una bandera de golf al compilar el intérprete. Entre otras cosas, le permite abreviar las llamadas de método a su identificador único más corto.
fuente
Python 2 ,
198,193,189,182,179,175,169,165 bytesPruébalo en línea!
-¡4 bytes! Gracias a mbomb007 por sugerir el uso de tab en lugar de espacio.
modificó el formato de entrada, nuevamente gracias a mbomb007.
fuente
Python 3.6,
211185181178 bytesSale con un error para resultados falsos.
Esto requiere Python 3.6, que puede ejecutar en un shell aquí .
Puede probarlo sin el orden de salida correcto en TIO aquí . (TIO no tiene 3.6).
Sin golf:
Si solo el orden no importara ...
fuente
a1,12
volver ena1,12
lugar deFalse
? Bajo la sección de Advertencias se dice que "a1" con la tabla de traducción de [a1,12] se evalúa como 12 .False
.1a 21
también estaría mal, ya que el oeder tiene que ser preservado.a1,12
lugar dea1,22
.Röda ,
108119 bytesPruébalo en línea!
Esta es una función que toma dos listas de caracteres del flujo y empuja dos listas al flujo.
Esto podría ser clasificador si se me permitiera devolver pares.
Explicación (desactualizada):
Aquí hay una solución de subrayado que no contiene variables (114 bytes):
Eso es un montón de guiones bajos.
fuente
<>
?a() <> b()
es igual queinterleave([a()], [b()])
(o simplementeinterleave(a, b)
, sia
yb
son matrices).a1 22 => false
caso de prueba. "todas las traducciones ocurren independientemente unas de otras, lo que significa que esto es falso".AWK, 140 bytes
Uso: Coloque el código en
FILE
entonces:Las cadenas de entrada deben estar separadas por espacios en blanco.
La salida está vacía si fallan, o 2 cadenas separadas por un espacio.
fuente
k, 28 bytes
Explicación:
fuente
APL (Dyalog) con AGL , 22 bytes
Pruébalo en línea!
{
...}
función anónima:Si…
⍺⍵
los argumentos⍳⍨¨
cuando se autoindexa (es decir, las primeras apariciones de sus elementos en sí mismos)≡/
son equivalentes:
luego:⍺(
...)⍵
aplique la siguiente función tácita a los argumentos:,¨
concatenar elementos correspondientes (errores en longitudes que no coinciden)é
luego filtrar por (é
es solo la función primitiva/
)≠
donde las cuerdas son diferentes∪
único (eliminar duplicados)↓⍉↑
transponer lista de pares a pares de listas (literalmente, mezclar en tabla, transponer tabla, dividir en listas)de lo contrario, no hagas nada
fuente
↓⍉↑
Todavía me tiene un poco confundido.CJam, 38 bytes
La entrada y la salida son matrices en la pila.
fuente
PHP (> = 7.1), 165 bytes
impresiones
0
para falsas, matriz asociativa más. Ejecutar-r
o probarlo en línea .Descompostura
fuente
Output can be as an array or ...
, entonces diría que sí. La versión actual de PHP está implícita en todas mis publicaciones; pero si encuentro algo importante para editar, agregaré la versión.array_unique($r)!=$r
en todos los casosarray_unique($r)<$r
, votaré tu publicación solo por este truco. En este momento estoy buscando una explicaciónarray_unique($t)<$t
(tuvo que cambiar debido a quecan
acnn
no es válido) funciona, porque la comparación de matrices (a diferencia de la comparación de cadenas) compara longitudes antes que nada.can
quecnn
me costó 17 Bytes Olvide mi sugerencia