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 nno se traduce porque es una relación 1 a 1.
"rabid", "snail" => ["rabd","snal"]
Observe cómo ino se traduce porque es una relación 1 a 1.
"ass", "all" => ["s","l"]
A no está incluido, permanece igual, se spuede asignar ldebido 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 ay 1no 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
ano será igualby queatampocobestará vacío. aybson 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
ayb. - 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
snailsaanimalsimposible. - 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
assyalldebería sers,l.JavaScript (ES6),
108107105106 bytesEditar :
"22" / "a1"se corrigió para admitir entradas como esa que deberían ser falsas.Devuelve una
0o 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 => falsecaso 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;22falsa, 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
aybson 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
ay el primer carácter debhasta que una de las cadenas quede vacía.Ahora hay posibilidades para el "espacio de patrones".
;;abcAmbas cuerdas son de igual longituddef;;abcaes más largo queb;def;abcbes más largo queaAhora 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
ayb.abc;1b2=>ac;12Después de eso, tenemos que eliminar los caracteres duplicados.
sese;1212=>se;12, pero esto conserva entradas comoaba;123Finalmente, eliminamos la entrada si hay caracteres duplicados que se asignan a diferentes caracteres como
aba;123oa1;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,12volver ena1,12lugar 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 21también estaría mal, ya que el oeder tiene que ser preservado.a1,12lugar 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), siaybson matrices).a1 22 => falsecaso 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
FILEentonces: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
0para falsas, matriz asociativa más. Ejecutar-ro 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)!=$ren 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 quecanacnnno es válido) funciona, porque la comparación de matrices (a diferencia de la comparación de cadenas) compara longitudes antes que nada.canquecnnme costó 17 Bytes Olvide mi sugerencia