Défi
Écrivez un programme qui applique une fonction injective qui prend une paire ordonnée de chaînes en entrée et une chaîne en sortie. En d'autres termes, chaque entrée doit correspondre à une sortie unique.
Détails
- L'entrée peut être tout deux chaînes de longueur arbitraire, mais se compose uniquement de caractères ASCII imprimables (codes ).
- De même, la chaîne de sortie n'a pas de restriction de longueur, mais elle doit être constituée uniquement de caractères ASCII imprimables.
- Si votre langue ne peut pas gérer des chaînes de longueur arbitraire, le programme peut simplement fonctionner théoriquement pour des chaînes de n'importe quelle taille.
- Le mappage des entrées aux sorties doit être cohérent entre les exécutions du programme. Sinon, le mappage que vous utilisez dépend entièrement de vous, tant qu'il s'agit d'une injection.
- L'entrée est ordonnée. Si les deux chaînes d'entrée sont différentes, elles doivent produire une sortie différente que si elles étaient échangées.
- Toutes les chaînes n'ont pas besoin d'être une sortie possible.
- La réponse la plus courte dans chaque langue gagne!
Cas de test
Les entrées suivantes devraient toutes entraîner des sorties différentes. Pour éviter toute confusion, les chaînes sont entourées de guillemets («») et séparées par des espaces simples.
"Bonjour le monde" «Lelho» «drowl» "différent" "pas le même" «Code» «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" «\» «" » «\\» «\" »
Réponses:
brainfuck,
30292723 octetsEssayez-le en ligne!
Les entrées sont séparées par un
0x01
octet.Cela
["foo", "bar"]
s'enfUToUToUTUTbUTaUTrUT
. Pour récupérer les deux chaînes originales, prenez des groupes de 3 caractères, trouvez celui où ne se trouve pas la deuxième lettreU
et divisez-le.la source
JavaScript (ES6), 14 octets
Prend l'entrée comme un tableau de 2 chaînes. Inspiré par la réponse de Luis .
Essayez-le en ligne!
JavaScript (ES6),
2120 octetsPrend l'entrée comme
(a)(b)
.Essayez-le en ligne!
Renvoie la longueur dea , suivie d'une virgule, suivie de la concaténation de a et b .
la source
stringify
moi-même l' astuce!a="hello",""
b="world"
eta="hello"
b="","world"
["\"hello\",\"\"","\"world\""]
et["\"hello\"","\"\",\"world\""]
.JSON.stringify()
s'échappe définitivement"
. Voir un vidage hexadécimal .jq -c, 0 octet
Essayez-le en ligne!
Cela ressemble vraiment à de la triche ...? Mais il semble respecter les règles du challenge.
Par défaut,
jq
affichera son entrée dans un format JSON lisible par l'homme. L'-c
indicateur (compact) indiquejq
de sortir dans un style "compact", ce qui supprime les nouvelles lignes (car le défi interdit les ASCII non imprimables).la source
["","x"]
et["x",""]
respectivementPython 3 , 3 octets
Une fonction (intégrée) qui, étant donné une liste des deux chaînes, donne une représentation sous forme de chaîne de la liste
Essayez-le en ligne!
la source
Japt
-S
, 3 octetsJe sens toujours que je dois manquer quelque chose ici ...
Essayez-le
Peut-être 2 octets:
Essayez-le
Ou l'étirer avec cet octet:
Essayez-le
La première version mappe chaque chaîne du tableau à ses points de code et les renvoie joints à un espace.
La deuxième version divise chaque chaîne en un tableau de caractères et les renvoie jointes à un espace.
Et la troisième version, qui ressemble à de la triche, sort juste l'entrée avec le
-Q
drapeau faisant le gros du travailsrringify
.la source
Pyth , 4 octets
Essayez-le en ligne!
Cela convertit chaque chaîne en base 256, puis les joint dans l'ordre avec a
"
. Étant donné que les résultats sont chacun des nombres, les"
sépare sans ambiguïté et les chaînes d'origine peuvent être récupérées avecmCsdczN
.la source
T-SQL, 38 octets
L'entrée provient d'une table préexistanteje avec une et b , selon nos règles IO .
varchar
champsUtilise
QUOTENAME
, qui entoure les cordes[]
et échappe également aux supports internes. Devrait correspondre à une sortie unique.la source
SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t
Essayez-le en ligneZsh , 7 octets
Essayez-le en ligne!
Joint implicitement les arguments sur les espaces. le
q
modificateur indique à zsh de citer les arguments, ce qui échappe de manière cruciale aux espaces, garantissant qu'un espace non échappé sépare sans ambiguïté les deux arguments.(Sans
q
,"a " "b"
et"a" " b"
céderait tous les deux"a b"
.)la source
MATL , 1 octet
Le code prend en entrée un tableau de deux chaînes et génère une représentation sous forme de chaîne de ce tableau.
Essayez-le en ligne!
Explication
Le code lit simplement l'entrée comme une chaîne, non évaluée.
la source
Jelly, 2 bytes
A monadic Link accepting a list of two lists of characters as its argument which yields a single list of characters.
Try it online!
How?
It's a built-in to get Python's string representation, simples.
la source
Haskell, 4 bytes
The Haskell built-in to turn things into strings. The input is taken as a pair of strings.
Try it online!
la source
05AB1E, 2 bytes
Try it online! Interprets each string as a base-256 integer, then prints the two in the form
[1, 2]
.05AB1E, 1 byte (unknown validity)
Try it online!
Takes the cartesian product of the input with itself. Quotes in the input are not escaped, which could cause confusion. I brute-forced all combinations of up to 12
", "
and"], ["
and didn’t find any collision; however, I can’t prove there aren’t any collisions for longer strings. If anybody can come up with a proof or counter-example, I’d highly appreciate it!The trivial 0-byter fails because of quotes not being escaped: inputs (
", "
, empty string) and (empty string,", "
) both yield the output["", "", ""]
.The 1-byter
º
(mirror each input string) also fails because of this: inputs (", "" ,"
, empty string) and (empty string," ,"", "
) both yield the output["", "" ,"", "" ,"", ""]
.la source
C# with 26 bytes (thanks to Lukas Lang, Kevin Cruijssen and Jo King)
tio.run lambda
la source
$"{a.Length}.{a}{b}"
- you can always extracta
andb
from this without any ambiguity (just read until the first.
to get the length ofa
,b
is then the restCharcoal, 12 bytes
Try it online! Link is to verbose version of code. Explanation:
la source
PowerShell, 22 bytes
Many fixes thanks to mazzy
Try it online!
Take five, oh my.
la source
"ab" "c"
and"a" "bc"
both produce the same output.R, 4 bytes
Try it online!
A built-in function which returns the string representation of the input (inspired by Jonathan Allan's answer )
la source
Wolfram Language (Mathematica), 8 bytes
Try it online!
la source
{"Hello, ","World"}
and{"Hello",", World"}
don't they give the same string?Compress
it is thenCSS + HTML, 55 + 20 = 75 bytes
Provide the inputs in the HTML after
<code>
tags. Visually injects letters one by one from each input into the output. When an input is longer than the other one, visual spaces are shown for missing letter(s) of the shorter input. Also one comma is added in HTML to force visual output uniqueness (I hope).la source
C# (Visual C# Interactive Compiler), 5 bytes
Try it online!
la source
Perl 6,
63 bytesTry it online!
Outputs the object representation to STDERR.
la source
["Hello, ", "World!"]
Lua, 27 bytes
Try it online!
Full program, take input as arguments.
Inspired by zsh answer, as it also use
%q
modifier to use internal safe-string engine.Also, I can think of just
but I'm not sure if this is acceptable answer.
la source
('%q%q'):format
doesn't result in an object that can, for example, be assigned to a variable. It just causes a syntax error on its own. The colon syntax is just a shortcut for'%q%q'.format('%q%q', ...)
and Lua doesn't allow partial application for functionssed, 19 bytes
Try it online!
la source
JavaScript (SpiderMonkey), 6 bytes
Try it online!
Input array of strings, output a single string.
Inspired by Arnauld's JSON.stringify answer.
la source
C (gcc), 59 bytes
Thanks to Grimy for the suggestion.
Takes an array of input strings (of which "2" is the correct number for this challenge) and prints their character values, including the trailing
NUL
. Technically, the%p
formatter used byprintf
is for pointers, but it works fine for displaying hex values of arbitrary integers if you're not picky about how they look!Try it online!
la source
Brachylog, 0 bytes
Input as an array of 2 strings, output in the format:
Z = ["{{string 1 stringified}}","{{string 2 stringified}}"]
Inspired by Arnauld's JSON.stringify answer and Doorknob's empty jq answer
Try it online!
la source
PHP, 9 bytes
Try it online!
Input is an array of 2 strings like this:
['abc', 'def']
. Uses PHP's serialize to serialize the input into a string.la source
Bash, 11 bytes
Try it online!
${parameter@Q}
quotes the parameter for reuse as input. In the case of an array, it quotes each element.la source
Ruby, 12 bytes
Try it online!
la source