Desafío
Escriba un programa que aplique una función inyectiva que tome un par ordenado de cadenas como entrada y una cadena como salida. En otras palabras, cada entrada debe correlacionarse con una salida única.
Detalles específicos
- La entrada puede ser cualquiera de las dos cadenas de longitud arbitraria, pero consistirá solo en caracteres ASCII imprimibles (códigos ).
- Del mismo modo, la cadena de salida no tiene restricción de longitud, pero debe consistir solo en caracteres ASCII imprimibles.
- Si su idioma no puede manejar cadenas de longitud arbitraria, el programa simplemente puede funcionar teóricamente para cadenas de cualquier tamaño.
- La asignación de entradas a salidas debe ser coherente entre las ejecuciones del programa. De lo contrario, el mapeo que use depende completamente de usted, siempre que sea una inyección.
- La entrada está ordenada. Si las dos cadenas de entrada son diferentes, deberían producir una salida diferente que si se intercambiaran.
- No todas las cadenas deben ser una salida posible.
- ¡La respuesta más corta en cada idioma gana!
Casos de prueba
Las siguientes entradas deberían dar como resultado diferentes salidas. Para evitar confusiones, las cuerdas están rodeadas por guillemets («») y separadas por espacios individuales.
"Hola Mundo" «Lelho» «drowl» «Diffe» «_rent» "no es el mísmo" «Código» «Golf» «Co» «deGolf» «CodeGolf» «» «» «» «» «» «» «» «» «» «» «» "a B C D e F" "a B C D e F" "a B C D e F" "a B C D e F" «\» «" » «\\» «\" »
Respuestas:
brainfuck,
30292723 bytesPruébalo en línea!
Las entradas están separadas por un
0x01
byte.Esto se convierte
["foo", "bar"]
enfUToUToUTUTbUTaUTrUT
. Para recuperar las dos cadenas originales, tome grupos de 3 caracteres, encuentre el que no está en la segunda letraU
y divídalo allí.fuente
JavaScript (ES6), 14 bytes
Toma la entrada como una matriz de 2 cadenas. Inspirado por la respuesta de Luis .
Pruébalo en línea!
JavaScript (ES6),
2120 bytesToma entrada como
(a)(b)
.Pruébalo en línea!
Devuelve la longitud dea , seguida de una coma, seguida de la concatenación de a y b .
fuente
stringify
truco yo mismo!a="hello",""
b="world"
ya="hello"
b="","world"
["\"hello\",\"\"","\"world\""]
y["\"hello\"","\"\",\"world\""]
.JSON.stringify()
Definitivamente se escapa"
. Ver un basurero hexadecimal .jq -c, 0 bytes
Pruébalo en línea!
Esto definitivamente se siente como hacer trampa ...? Pero parece cumplir con las reglas del desafío.
De forma predeterminada,
jq
generará su entrada en un formato JSON legible para humanos. El-c
indicador (compacto) le indicajq
a la salida en estilo "compacto", que elimina las nuevas líneas (ya que el desafío prohíbe ASCII no imprimible).fuente
["","x"]
y["x",""]
respectivamentePython 3 , 3 bytes
Una función (incorporada) que, dada una lista de las dos cadenas, proporciona una representación de cadena de la lista
Pruébalo en línea!
fuente
Japt
-S
, 3 bytesYo todavía siento que debo estar perdiendo algo aquí ...
Intentalo
Posiblemente 2 bytes:
Intentalo
O estirándolo con este 1 byter:
Intentalo
La primera versión asigna cada cadena de la matriz a sus puntos de código y las muestra unidas con un espacio.
La segunda versión divide cada cadena en una matriz de caracteres y las muestra unidas con un espacio.
Y la tercera versión, que se siente como hacer trampa, solo genera la entrada con la
-Q
bandera haciendo el trabajo pesadosrringify
.fuente
Pyth , 4 bytes
Pruébalo en línea!
Esto convierte cada cadena en base 256 y luego las une en orden con a
"
. Como los resultados son números, los"
separa inequívocamente y las cadenas originales se pueden recuperar conmCsdczN
.fuente
T-SQL, 38 bytes
La entrada se toma de una tabla preexistenteyo con un y si , según nuestras reglas de IO .
varchar
camposUsos
QUOTENAME
, que rodea las cuerdas[]
y también escapa a los corchetes internos. Debe asignarse a una salida única.fuente
SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t
Pruébelo en líneaZsh , 7 bytes
Pruébalo en línea!
Se une implícitamente a los argumentos sobre espacios. El
q
modificador le dice a zsh que cite los argumentos, lo que escapa de manera crucial a los espacios, asegurando que un espacio sin escape separe inequívocamente los dos argumentos.(Sin
q
,"a " "b"
y"a" " b"
ambos cederían"a b"
).fuente
MATL , 1 byte
El código toma una matriz de dos cadenas como entrada y genera una representación de cadena de esa matriz.
Pruébalo en línea!
Explicación
El código simplemente lee la entrada como una cadena, sin evaluar.
fuente
Jalea , 2 bytes
Un enlace monádico que acepta una lista de dos listas de caracteres como argumento, lo que produce una sola lista de caracteres.
Pruébalo en línea!
¿Cómo?
Es una función integrada para obtener la representación de cadena de Python, simple.
fuente
Haskell, 4 bytes
El Haskell incorporado para convertir las cosas en cuerdas. La entrada se toma como un par de cadenas.
Pruébalo en línea!
fuente
05AB1E , 2 bytes
Pruébalo en línea! Interpreta cada cadena como un entero de base 256, luego imprime las dos en el formulario
[1, 2]
.05AB1E, 1 byte (validez desconocida)
Pruébalo en línea!
Toma el producto cartesiano de la entrada consigo mismo. Las citas en la entrada no se escapan, lo que podría causar confusión. Forcé brutalmente todas las combinaciones de hasta 12
", "
y"], ["
no encontré ninguna colisión; Sin embargo, no puedo demostrar que no haya colisiones para cadenas más largas. Si alguien puede presentar una prueba o un contraejemplo, ¡lo agradecería mucho!El trivial 0-byter falla debido a que no se escapan las comillas: las entradas (
", "
, cadena vacía) y (cadena vacía,", "
) producen la salida["", "", ""]
.El 1 byter
º
(espejo de cada cadena de entrada) también falla debido a esto: las entradas (", "" ,"
, cadena vacía) y (cadena vacía," ,"", "
) producen la salida["", "" ,"", "" ,"", ""]
.fuente
C # con 26 bytes (gracias a Lukas Lang, Kevin Cruijssen y Jo King)
tio.run lambda
fuente
$"{a.Length}.{a}{b}"
- siempre se puede extraera
yb
de esto sin ningún ambigüedad (solo lea hasta el primero.
para obtener la longitud dea
,b
entonces es el restoCarbón de leña , 12 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
PowerShell , 22 bytes
Muchas correcciones gracias a mazzy
Pruébalo en línea!
Toma cinco, oh mi.
fuente
"ab" "c"
y"a" "bc"
ambos producen la misma salida.R , 4 bytes
Pruébalo en línea!
Una función incorporada que devuelve la representación de cadena de la entrada (inspirada en la respuesta de Jonathan Allan )
fuente
Wolfram Language (Mathematica) , 8 bytes
Pruébalo en línea!
fuente
{"Hello, ","World"}
y{"Hello",", World"}
no dan la misma cuerda?Compress
es entoncesCSS + HTML, 55 + 20 = 75 bytes
Proporcione las entradas en el HTML después de las
<code>
etiquetas. Inyecta visualmente letras una por una de cada entrada en la salida. Cuando una entrada es más larga que la otra, se muestran espacios visuales para las letras faltantes de la entrada más corta. También se agrega una coma en HTML para forzar la unicidad de la salida visual (espero).fuente
C # (compilador interactivo de Visual C #) , 5 bytes
Pruébalo en línea!
fuente
Perl 6 ,
63 bytesPruébalo en línea!
Emite la representación del objeto a STDERR.
fuente
["Hello, ", "World!"]
Lua , 27 bytes
Pruébalo en línea!
Programa completo, tome la entrada como argumentos.
Inspirado por la respuesta zsh, ya que también usa un
%q
modificador para usar el motor interno de cadena segura.Además, puedo pensar en
pero no estoy seguro si esta es una respuesta aceptable.
fuente
('%q%q'):format
no da como resultado un objeto que, por ejemplo, pueda asignarse a una variable. Solo causa un error de sintaxis por sí solo. La sintaxis de dos puntos es solo un atajo'%q%q'.format('%q%q', ...)
y Lua no permite la aplicación parcial de funcionessed , 19 bytes
Pruébalo en línea!
fuente
JavaScript (SpiderMonkey) , 6 bytes
Pruébalo en línea!
Entrada de matriz de cadenas, salida de una sola cadena.
Inspirado por la respuesta JSON.stringify de Arnauld .
fuente
C (gcc) , 59 bytes
Gracias a Grimy por la sugerencia.
Toma una matriz de cadenas de entrada (de las cuales "2" es el número correcto para este desafío) e imprime sus valores de caracteres, incluido el final
NUL
. Técnicamente, el%p
formateador utilizadoprintf
es para punteros, ¡pero funciona bien para mostrar valores hexadecimales de enteros arbitrarios si no eres exigente sobre cómo se ven!Pruébalo en línea!
fuente
Brachylog , 0 bytes
Entrada como un conjunto de 2 cadenas, salida en el formato:
Z = ["{{string 1 stringified}}","{{string 2 stringified}}"]
Inspirado por la respuesta JSON.stringify de Arnauld y la respuesta jq vacía de Doorknob
Pruébalo en línea!
fuente
PHP , 9 bytes
Pruébalo en línea!
De entrada es una matriz de 2 cadenas, como este:
['abc', 'def']
. Utiliza la serialización de PHP para serializar la entrada en una cadena.fuente
Bash , 11 bytes
Pruébalo en línea!
${parameter@Q}
cita el parámetro para su reutilización como entrada. En el caso de una matriz, cita cada elemento.fuente
Rubí , 12 bytes.
Pruébalo en línea!
fuente