Meu desafio anterior, Imprimir texto invisível, era bastante popular, provavelmente devido ao quão trivial é.
No entanto, aqueles mais atentos de vocês devem ter notado que não estão realmente imprimindo texto invisível, porque é impossível ler o que foi inserido, apenas a saída.
Então eu percebi que tal um verdadeiro desafio texto invisível.
Dada uma sequência que consiste apenas em caracteres ASCII imprimíveis ( 0x20-0x7E
), converta cada caractere em um caractere Unicode distinto (na codificação UTF-8) que não seja um dos 95 caracteres ASCII imprimíveis (qualquer caractere UTF-8 fora do 0x20-0x7E
intervalo)
Entrada
Uma sequência de caracteres ASCII imprimíveis, como uma sequência ou matriz / lista de caracteres
Resultado
A sequência de entrada com cada caractere é substituída por um caractere não imprimível distinto. Cada caractere especificado deve ter um caractere não imprimível correspondente que não seja usado como substituto para qualquer outro caractere.
Se você não conseguir imprimir caracteres não imprimíveis, poderá gerar os valores dos caracteres.
Por exemplo, se o seu código substituir todos os minúsculos a
por 0x01
, você não poderá usar 0x01
como substituto para outros caracteres.
Seu código também deve ser determinístico . Isso significa que, se, dada a string Hello
, todas as minúsculas l
forem substituídas por 0x03
, seu código também deverá substituir todas as minúsculas l
por 0x03
qualquer outra string.
Casos de teste
É um pouco difícil escrever casos de teste para esse desafio, então mostrarei a saída como uma lista de códigos hexadecimais
input -> output
"Hello" -> [0x01, 0x02, 0x03, 0x03, 0x04]
"Hi!" -> [0x01, 0x05, 0x06]
"" -> []
" H " -> [0x07, 0x07, 0x07, 0x01, 0x07, 0x07, 0x07]
"yo! " -> [0x08, 0x04, 0x06, 0x07]
Respostas:
Geléia , 3 bytes
Experimente online!
Esquadra cada ponto de código.
fonte
Espaço em branco ,
3936 bytesExperimente online!
Explicação
Originalmente, eu queria multiplicar por -0 ou -1, pois seriam os dígitos mais curtos possíveis para declarar em espaço em branco. O TIO não diferencia entre -0 e +0, então está fora. Infelizmente, enquanto o tutorial / especificação é ambíguo sobre como interpretar um valor negativo como um caractere TIO (corretamente) lança um erro sobre o argumento inválido, de modo que também não é uma opção.
A próxima constante de trabalho mais curta é 4, portanto, acabamos executando a mesma abordagem básica das soluções Powershell / Pyth.
Espaço em branco ,
5653 bytes - mapeia para marcar caracteresExperimente online!
Explicação
Efetivamente, a mesma abordagem da versão anterior, exceto que ela usa 0xE0000 como constante e adiciona em vez de multiplicar. Isso mapeia os caracteres ASCII visíveis para o caractere de tag Unicode correspondente (o intervalo U + E0000-U + E007F). O uso pretendido para esse intervalo era indicar o idioma do texto em um arquivo de texto sem formatação, no entanto esse uso é desencorajado. Esse código produzirá rótulos válidos se você prefixar as strings com um caractere 0x01.
O Padrão Unicode diz que os caracteres desse intervalo não têm renderização visível, então acho que isso atende melhor ao espírito do desafio do que a abordagem anterior.
fonte
Japonês ,
52 bytesExperimente online
Explicação
fonte
126 ** 3 == 2000376
isso não está no intervalo [0..1114111]. Você ainda pode usar o quadrado :) Isso ocorre porque o UTF-8 termina aí, enquanto o UTF-16 continua.Brain-Flak , 33 bytes
Inclui +1 para
-c
Experimente online!
fonte
Braingolf v0.6, 17 bytes
Esquadra cada valor de char e depois imprime.
-1 byte graças à solução quadrada de Erik the Outgolfer
Braingolf v0.7, 6 bytes [não concorrente]
Também esquadrinha cada valor e depois imprime, mas a v0.7 possui o
{}
loop "foreach"fonte
Mathematica, 48 bytes
Explicação:
Curiosamente das duas opções de módulo inferiores a 1000, que alteraram os 96 caracteres para 96 valores únicos, com o módulo 978, os dois valores mais baixos foram 7 e 33. Felizmente, vezes por 4, converte isso em 28 e 132, os quais ficam fora do intervalo visível. Se eu usasse o outro módulo de 784, precisava multiplicar por 18 para mover os números para fora do intervalo.
Caso de teste.
Nota: barras invertidas extras como caracteres de escape para
"
e\
. O caractere 0x7E também não parece querer colar corretamente.Resultado:
O uso de
Hash
surgiu comoToCharacterCode
é realmente longo. No entanto, o hash era quase tão caro. A maneira fácil do mathematica de fazer isso seria 49 bytes:fonte
CJam ,
85 bytesExperimente online!
Adiciona 95 a cada ponto de código.
fonte
Pitão, 6 bytes
Experimente aqui.
Multiplica cada ponto de código por 4.
fonte
PowerShell,
3231 bytes-1 Obrigado a neil,
99+
a4*
multiplica 9 por cada código de caractere e o imprime novamente.
fonte
05AB1E , 4 bytes
Experimente online!
Esquadra cada ponto de código.
fonte
CJam , 4 bytes
XORs cada ponto de código com -1 . Os caracteres de CJam têm 16 bits de largura, portanto, este mapeia o ponto de código n para o ponto de código 65535 - n .
Experimente online!
fonte
Decimal , 37 bytes
Explicação:
Experimente online!
fonte
90D
) termina?Planilhas Google, 68 bytes
Eu queria postar isso para mostrar como é estranho fazer algumas funções básicas no Planilhas. Deseja executar uma operação para todos os caracteres em uma célula e obter o resultado concatenado? Você tem 42 bytes antes mesmo de agir sobre esses caracteres.
Caso contrário, é igual a outras soluções: calcule o quadrado do ponto de código de cada caractere.
fonte
Python 3,
4038 bytesExperimente Online!
fonte
C, 42 bytes
Assume um código de idioma UTF-8. A entrada é quadrada.
Experimente online!
fonte
Limpo , 25 bytes
Uma função parcial literal.
Experimente online!
Realisticamente:
Compreensão de array não caixa sobre uma matriz não caixa do mesmo tipo (
{#Char} -> {#Char}
). Clean poderá determinar que a exclusividade é transferível (!u:{#Char} -> u:{#Char}
) e que o tamanho é igual ao tamanho da entrada. Isso significa que, se você passar a*String
, todos os caracteres serão destrutivamente atualizados com o correspondente na saída, o que significa que nenhuma alocação ou movimento de memória é feito e o nó do gráfico é totalmente reutilizado.Experimente online!
fonte