Desafio
Escreva um programa que aplique uma função injetiva que aceita um par ordenado de seqüências de caracteres como entrada e uma sequência como saída. Em outras palavras, cada entrada deve mapear para uma saída exclusiva.
Específicos
- A entrada pode ser quaisquer duas cadeias de comprimento arbitrário, mas irá consistir apenas em caracteres ASCII imprimível (códigos ).
- Da mesma forma, a sequência de saída não possui restrição de comprimento, mas deve consistir apenas em caracteres ASCII imprimíveis.
- Se o seu idioma não puder lidar com cadeias de comprimento arbitrário, o programa poderá funcionar apenas teoricamente para cadeias de qualquer tamanho.
- O mapeamento de entradas para saídas deve ser consistente entre as execuções do programa. Caso contrário, o mapeamento que você usa depende totalmente de você, desde que seja uma injeção.
- A entrada está ordenada. Se as duas seqüências de entrada forem diferentes, elas deverão produzir uma saída diferente da que foram trocadas.
- Nem toda string precisa ser uma saída possível.
- A resposta mais curta em cada idioma vence!
Casos de teste
As seguintes entradas devem resultar em diferentes saídas. Para evitar confusão, as cordas são cercadas por guillemets («») e separadas por espaços únicos.
"Olá Mundo" «Lelho» «drowl» "diferente" "não é o mesmo" «Código» «Golfe» «Co» «deGolf» «CodeGolf» «» «» «» «» «» «» «» «» «» «» «» «Abc", »« def » «Abc» «," def » «Abc '» «' def» «Abc '» «' def» «\» «" » «\\» «\" »
Respostas:
brainfuck,
30292723 bytesExperimente online!
As entradas são separadas por um
0x01
byte.Isso se
["foo", "bar"]
transformafUToUToUTUTbUTaUTrUT
. Para recuperar as duas seqüências originais, pegue grupos de 3 caracteres, encontre o que não está na segunda letraU
e divida-o.fonte
JavaScript (ES6), 14 bytes
Recebe a entrada como uma matriz de 2 strings. Inspirado pela resposta de Luis .
Experimente online!
JavaScript (ES6),
2120 bytesToma entrada como
(a)(b)
.Experimente online!
Retorna o comprimento dea , seguido por vírgula, seguido da concatenação de a e b .
fonte
stringify
truque sozinho!a="hello",""
b="world"
ea="hello"
b="","world"
["\"hello\",\"\"","\"world\""]
e["\"hello\"","\"\",\"world\""]
.JSON.stringify()
definitivamente escapa"
. Veja um despejo hexadecimal .jq -c, 0 bytes
Experimente online!
Definitivamente isso parece trapaça ...? Mas parece estar em conformidade com as regras do desafio.
Por padrão,
jq
produzirá sua entrada em um formato JSON legível por humanos. O-c
sinalizador (compacto) indicajq
a saída no estilo "compacto", que remove as novas linhas (já que o desafio proíbe o ASCII não imprimível).fonte
["","x"]
e["x",""]
respectivamentePython 3 , 3 bytes
Uma função (incorporada) que, dada uma lista das duas cadeias, fornece uma representação da cadeia
Experimente online!
fonte
Japonês
-S
, 3 bytesEu ainda sinto que devo estar perdendo alguma coisa aqui ...
Tente
Possivelmente 2 bytes:
Tente
Ou esticá-lo com este 1 byter:
Tente
A primeira versão mapeia cada cadeia de caracteres da matriz para seus pontos de código e os envia com um espaço.
A segunda versão divide cada seqüência de caracteres em uma matriz de caracteres e as gera juntas com um espaço.
E a terceira versão, que parece trapaça, apenas envia a entrada com a
-Q
bandeira fazendo o trabalho pesado dasrringify
mesma.fonte
Pitão , 4 bytes
Experimente online!
Isso converte cada seqüência de caracteres na base 256 e as une em ordem com a
"
. Como os resultados são cada número, os"
separa sem ambiguidade e as seqüências originais podem ser recuperadasmCsdczN
.fonte
T-SQL, 38 bytes
varchar
Usos
QUOTENAME
, que circundam as cordas[]
e também escapam de qualquer colchete interno. Deve mapear para uma saída exclusiva.fonte
SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t
Experimente onlineZsh , 7 bytes
Experimente online!
Une implicitamente os argumentos aos espaços. O
q
modificador diz ao zsh para citar os argumentos, que escapam crucialmente dos espaços, garantindo que um espaço sem escape separa sem ambiguidade os dois argumentos.(Sem
q
,"a " "b"
e"a" " b"
ambos renderiam"a b"
.)fonte
MATL , 1 byte
O código pega uma matriz de duas cadeias como entrada e gera uma representação de cadeia dessa matriz.
Experimente online!
Explicação
O código simplesmente lê a entrada como uma sequência, sem avaliação.
fonte
Gelatina , 2 bytes
Um link monádico que aceita uma lista de duas listas de caracteres como argumento, o que gera uma única lista de caracteres.
Experimente online!
Quão?
É um recurso interno para obter a representação de strings do Python, simples.
fonte
Haskell, 4 bytes
O Haskell embutido para transformar as coisas em strings. A entrada é tomada como um par de strings.
Experimente online!
fonte
05AB1E , 2 bytes
Experimente online! Interpreta cada sequência como um número inteiro de base 256 e, em seguida, imprime as duas no formulário
[1, 2]
.05AB1E, 1 byte (validade desconhecida)
Experimente online!
Leva consigo o produto cartesiano da entrada. As aspas na entrada não são escapadas, o que pode causar confusão. Forcei brutalmente todas as combinações de até 12
", "
e"], ["
não encontrei nenhuma colisão; no entanto, não posso provar que não há colisões para cadeias mais longas. Se alguém puder apresentar uma prova ou contra-exemplo, eu apreciaria muito!O trivial 0-byter falha devido a aspas não serem escapadas: entradas (
", "
, sequência vazia) e (sequência vazia", "
) produzem a saída["", "", ""]
.O 1 byter
º
(espelhar cada sequência de entrada) também falha por causa disso: inputs (", "" ,"
, string vazia) e (string vazia" ,"", "
) produzem a saída["", "" ,"", "" ,"", ""]
.fonte
C # com 26 bytes (graças a Lukas Lang, Kevin Cruijssen e Jo King)
tio.run lambda
fonte
$"{a.Length}.{a}{b}"
- você sempre pode extraira
eb
disso sem qualquer ambigüidade (apenas ler até o primeiro.
para obter o comprimento dea
,b
é, em seguida, o restoCarvão , 12 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
PowerShell , 22 bytes
Muitas correções graças ao mazzy
Experimente online!
Pegue cinco, oh meu.
fonte
"ab" "c"
e"a" "bc"
ambos produzem a mesma saída.R , 4 bytes
Experimente online!
Uma função interna que retorna a representação de string da entrada (inspirada na resposta de Jonathan Allan )
fonte
Wolfram Language (Mathematica) , 8 bytes
Experimente online!
fonte
{"Hello, ","World"}
e{"Hello",", World"}
eles não dão a mesma corda?Compress
é entãoCSS + HTML, 55 + 20 = 75 bytes
Forneça as entradas no HTML depois das
<code>
tags. Injeta visualmente as letras uma a uma de cada entrada na saída. Quando uma entrada é maior que a outra, os espaços visuais são mostrados para as letras ausentes da entrada mais curta. Também é adicionada uma vírgula em HTML para forçar a exclusividade da saída visual (espero).fonte
C # (compilador interativo do Visual C #) , 5 bytes
Experimente online!
fonte
Perl 6 ,
63 bytesExperimente online!
Emite a representação do objeto para STDERR.
fonte
["Hello, ", "World!"]
Lua , 27 bytes
Experimente online!
Programa completo, tome entrada como argumentos.
Inspirado na resposta zsh, como também usa
%q
modificador para usar o mecanismo interno de segurança.Além disso, eu posso pensar em apenas
mas não tenho certeza se essa é uma resposta aceitável.
fonte
('%q%q'):format
não resulta em um objeto que pode, por exemplo, ser atribuído a uma variável. Apenas causa um erro de sintaxe por si próprio. A sintaxe de cólon é apenas um atalho para'%q%q'.format('%q%q', ...)
e que Lua não permite a aplicação parcial para funçõessed , 19 bytes
Experimente online!
fonte
JavaScript (SpiderMonkey) , 6 bytes
Experimente online!
Array array de strings, produz uma string única.
Inspirado pela resposta JSON.stringify de Arnauld .
fonte
C (gcc) , 59 bytes
Agradeço a Grimy pela sugestão.
Pega uma matriz de sequências de entrada (da qual "2" é o número correto para esse desafio) e imprime seus valores de caracteres, incluindo o final
NUL
. Tecnicamente, o%p
formatador usado porprintf
é para ponteiros, mas funciona bem para exibir valores hexadecimais de números inteiros arbitrários, se você não for exigente quanto à aparência deles!Experimente online!
fonte
Braquilog , 0 bytes
Entrada como uma matriz de 2 seqüências, saída no formato:
Z = ["{{string 1 stringified}}","{{string 2 stringified}}"]
Inspirado na resposta JSON.stringify de Arnauld e na resposta jq vazia da maçaneta da porta
Experimente online!
fonte
PHP , 9 bytes
Experimente online!
A entrada é um conjunto de 2 cordas como este:
['abc', 'def']
. Usa serialização do PHP para serializar a entrada em uma string.fonte
Bash , 11 bytes
Experimente online!
${parameter@Q}
cita o parâmetro para reutilização como entrada. No caso de uma matriz, ela cita cada elemento.fonte
Ruby , 12 bytes
Experimente online!
fonte