Tarefa
Dada uma sequência de entrada de um ou mais caracteres ASCII cujos pontos de código estão entre 0 e 128 (exclusivo), faça o seguinte:
- Converta cada caractere em seu código ASCII de 7 bits (se o código ASCII for menor que 7 bits, coloque os zero bits iniciais)
- Concatenar todos os bits (isso resulta em
7*n
bits, onden
é o número de caracteres) - Para cada bit nesse fluxo de bits, imprima 1 se for diferente do bit anterior e imprima 0 caso contrário. O primeiro bit de saída é sempre 1.
Exemplo
Entrada:
Hi
Resultado:
11011001011101
Explicação:
A cadeia "Hi" possui os códigos ASCII
72 105
que em bits são:
1001000 1101001
E os indicadores de bits de transição:
11011001011101
Isso é código de golfe. O menor número de bytes vence.
Casos de teste
Caso de teste 1:
Hello World!
110110010101110011010101101010110001110000111110000110000001011101101010101100110001
Caso de teste 2:
%% COMMENT %%
1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111
Caso de teste 3 (crédito a Luis Mendo):
##
11100101110010
Parabéns a Luis Mendo pela solução mais curta com 9 bytes em MATL!
##
(levando0
bit; algumas respostas atualmente falhar por causa disso)Respostas:
MATL , 9 bytes
Experimente online!
Explicação
fonte
Python 2 , 58 bytes
Experimente online!
fonte
Japt
-P
, 11 bytesAproveita o fato de que os espaços podem ser coagidos para
0
no JavaScript ao tentar executar uma operação matemática ou, nesse caso, bit a bit nele.Experimente ou execute todos os casos de teste
fonte
0100000
. Também o caractere% (37) seria0100101
CJam , 21 bytes
Experimente online!
Explicação
Mostrando a pilha com uma entrada de amostra de
5
:Para verificar se um bit é diferente do bit anterior, criamos um vetor (elemento a elemento) xor entre a matriz de bits e a matriz de bits sem o primeiro elemento. Também removemos o último bit do resultado, porque ele é sempre o último bit da matriz mais longa inalterado.
fonte
APL (Dyalog Unicode) , 16 bytes SBCS
Programa completo. Solicita a string do stdin.
Experimente online!
⍞
solicitação de entrada ("uma cotação em um console")11⎕DR¨
altere cada caractere para bit-booleano D ata R ePresentation1↓¨
solte o primeiro bit de cada∊
ε nlist (achatar)2≠/
diferença pareada1,
Anexar umfonte
Gelatina , 12 bytes
Experimente online!
fonte
Carvão , 25 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Converta todos os caracteres em binários e preencha-os com um comprimento de 7 e imprima-os, mas deixe o cursor sobre o último dígito.
Repita até que o cursor esteja sobre o primeiro dígito.
Calcule se os dígitos são diferentes e substitua cada dígito pela diferença.
Sobrescreva o primeiro dígito com a
1
.fonte
PowerShell ,
735649 bytesExperimente online!
-17 bytes graças a mazzy :)
fonte
Ruby
-p
,6857 bytes-11 bytes roubando descaradamente o método usado por solução Python da xnor .
Experimente online!
Solução original:
Experimente online!
fonte
Oitava ,
3630 bytesCorreção graças a Luis Mendo
-2 bytes graças a Sanchises
Experimente online!
fonte
de2bi
.Python 2 , 104 bytes
Experimente online!
Uma rápida facada.
fonte
a*128+ord(c)
! Mas não o éreduce
elambda
tipo de caro?Dardo ,
213168 bytesOne-liner anterior
Experimente online!
Essa verbosidade e falta de ins fáceis de construir estão realmente matando essa. Ainda conseguiu puxar um forro embora.
fonte
Stax ,
1312 bytesExecute e depure
Se for garantido que todos os caracteres de entrada tenham o sétimo bit definido, como algumas respostas supõem, isso pode ser feito em 10 bytes
fonte
Kotlin , 182 bytes
Experimente online!
Espero poder melhorar isso em breve, sinto que deve haver alguns pontos a melhorar, mas não consigo pensar agora
fonte
Perl 5
-p
, 60 bytesExperimente online!
fonte
C (gcc (MinGW)), 90 bytes
Requer um fornecimento de compilador
itoa()
.fonte
Ruby
-p
, 50 bytesExperimente online!
Explicação
Primeira linha, igual à resposta da Value Ink :
Segunda linha:
No Ruby, você pode usar a interpolação em literais do Regexp, por exemplo
/Hello #{name}/
, e para variáveis que começam com$
ou@
você pode omitir os chavetas, portanto, se eg$&
for"0"
, o grawlixy/#$&$/
se tornará/0$/
.fonte
K (ngn / k) ,
913 bytesSolução:
Experimente online!
Explicação:
Notas:
fonte
#
por exemplo (apenas saída tem 6 bits)Emojicode , 263 bytes
Experimente online aqui.
Ungolfed:
fonte
JavaScript (V8) ,
15095 bytes-55 graças a @dana
Experimente online!
fonte
Python3.8 , 72 bytes
Solução:
Explicação:
Desde que o Python 3.8 introduziu expressões de atribuição (em vez das instruções de atribuição padrão), eu queria usá-las em uma compreensão de lista que precisa lembrar o último item. Essa não é a melhor maneira de fazer isso, mas demonstra um método interessante de usar a expressão de atribuição.
O código cria uma função lambda que recebe o argumento necessário, que é a string a ser convertida. Quando chamada, a função prossegue da seguinte maneira. Todo caractere em a é convertido em seu código de caractere ao qual 128 é adicionado para lidar com caracteres de 6 bits (a representação binária sempre será de 8 bits e podemos cortar o primeiro bit). Esse número é convertido em binário e o cabeçalho (0x) e o 1 inicial da adição de 128 são cortados. Essas novas seqüências de caracteres são unidas em uma sequência maior.
Para cada caractere nessa nova seqüência de caracteres (que contém a representação concatenada de 7 bits do texto), é verificado se o caractere é igual ao caractere anterior. O que acontece com o primeiro personagem? O caractere do primeiro resultado sempre deve ser "1", portanto, apenas precisamos garantir que o que estiver na variável do último caractere não seja "1" nem "0". Fazemos isso reutilizando o parâmetro original agora que não o estamos mais usando. Isso pode ser um problema se a string original for um único "0" (um único "1" funciona), mas ignoraremos isso.
Durante a comparação, o caractere anterior foi avaliado primeiro; portanto, quando usamos a expressão de atribuição para definir a variável de caractere anterior para o caractere atual, isso não afeta a avaliação das expressões de comparação.
A comparação produz True ou False, que também pode ser usado como 1 ou 0, respectivamente, em Python, portanto, eles são usados para procurar um "1" ou "0" em uma string
fonte
bin(ord(i)+128)[3:]
->f"{ord(i):07b}"
Tcl ,
215167140 bytesExperimente online!
Usa turno por um e exclusivo - ou para detectar transições. Carrega lsb do caractere atual para msb do próximo caractere. Combina a saída para cada caractere juntando-se à lista retornada pelo lmap.
Usa lambdas com argumentos padrão para salvar bytes na inicialização e comandos repetidos.
Depende muito da ordem de operação. Funciona para cadeia vazia.
fonte
05AB1E (herdado) , 12 bytes
Usa a versão herdada de 05AB1E, pois
j
une implicitamente as seqüências de caracteres, o que requer um explícitoJ
após oj
na nova versão de 05AB1E.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Haskell , 137 bytes
Experimente online!
O maior problema aqui é converter booleanos (resultado do XOR) em '0' / '1'.
fonte
Python 3 ,
8884 bytesExperimente online!
Sinto que as tarefas devem ser evitáveis, mas não consegui pensar em nenhuma maneira de fazer isso.
Atualizar:
fonte
PHP , 90 bytes
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 80 bytes
Experimente online!
fonte
JavaScript (V8) , 73 bytes
Experimente online!
fonte