Nota: a primeira metade deste desafio vem do desafio anterior de Martin Ender, Visualize Bit Weaving .
A linguagem de programação esotérica evil possui uma operação interessante sobre valores de bytes que chama de "tecelagem".
É essencialmente uma permutação dos oito bits do byte (não importa de que extremidade começamos a contar, pois o padrão é simétrico):
- O bit 0 é movido para o bit 2
- O bit 1 é movido para o bit 0
- O bit 2 é movido para o bit 4
- O bit 3 é movido para o bit 1
- O bit 4 é movido para o bit 6
- O bit 5 é movido para o bit 3
- O bit 6 é movido para o bit 7
- O bit 7 é movido para o bit 5
Por conveniência, aqui estão outras três representações da permutação. Como um ciclo:
(02467531)
Como um mapeamento:
57361402 -> 76543210 -> 64725031
E como uma lista de pares do mapeamento:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Após a 8
tecelagem, o byte é redefinido essencialmente.
Por exemplo, tecer o número 10011101
(que está 157
na base 10) produzirá 01110110
(que está 118
na base 10).
Entrada
Existem apenas 256
entradas válidas, ou seja, todos os números inteiros entre 0
e 255
inclusive. Isso pode ser considerado em qualquer base, mas deve ser consistente e você deve especificar se a base escolhida não for a base dez.
Você não pode zerar suas entradas.
Resultado
Você deve produzir o resultado da tecelagem de bits, em qualquer base, que também deve ser consistente e especificada, se não a base dez.
Você pode zerar suas saídas.
Relacionados: Visualize Bit Weaving
fonte
Respostas:
Python 2.7,
44-> 36 bytesfonte
|
vez de+
e mascarar após o turno, poderá barbear 8 bytes removendo parênteses.<strike></strike>
em torno de sua pontuação de byte de idade para indicar o progresso :-)Mal, 3 caracteres
Experimente online!
A entrada está na base 256 (por exemplo, ASCII), por exemplo, para inserir o dígito 63, digite ASCII 63 que é
?
.Explicação:
Este modo se sente como fazer batota.
fonte
CJam,
1512 bytesObrigado a FryAmTheEggman por salvar 3 bytes.
Entrada na base 2. Saída também na base 2, preenchida com 8 bits com zeros.
Teste aqui.
Explicação
fonte
MATL , 14 bytes
A entrada está em decimal. A saída é binária com preenchimento zero.
Experimente online!
Explicação
fonte
Gelatina, 11 bytes
Tradução da resposta CJam de Martin. Experimente aqui.
fonte
JavaScript (ES6), 30 bytes
fonte
J, 12 bytes
Usa o permuto embutido
A.
com índice de permutação6532
que corresponde à operação de tecelagem de bits.Uso
Entrada é uma lista de dígitos binários. Saída é uma lista preenchida com zero de 8 dígitos binários.
Explicação
fonte
Retina , 39 bytes
Entrada e saída na base 2, a saída é preenchida à esquerda.
Experimente online!
Explicação
Isso apenas pressiona a entrada com zeros. A
+
indica que nesta fase é repetido até que a corda pára de mudar. Corresponde ao início da string, desde que haja menos de 8 caracteres, e insere um0
nessa posição.Agora, para a permutação real. A solução direta é esta:
No entanto, é dolorosamente longo e redundante. Encontrei uma formulação diferente da permutação que é muito mais fácil de implementar na Retina (
X
representa uma troca de bits adjacentes):Agora isso é muito mais fácil de implementar:
Simplesmente combina dois caracteres e os troca. Como as correspondências não se sobrepõem, isso troca todos os quatro pares.
Agora queremos fazer a mesma coisa novamente, mas queremos pular o primeiro caractere. A maneira mais fácil de fazer isso é exigir que a correspondência não comece no limite de uma palavra
\B
.fonte
código de máquina x86, 20 bytes
Em hexadecimal:
É um procedimento que recebe entrada e retorna resultado via registro AL
Desmontagem
fonte
C (macro não segura), 39 bytes
C (função), 41 bytes
C (programa completo), 59 bytes
(retorna via código de saída, chame com
echo "157" | ./weave;echo $?
)C (programa completo compatível com os padrões), 86 bytes
C (programa completo compatível com os padrões, sem avisos do compilador), 95 bytes
C (programa completo compatível com os padrões, sem avisos do compilador, que pode ler argumentos ou stdin e inclui verificação de erro / intervalo), 262 bytes
Demolir
Praticamente o mesmo que muitas respostas existentes: mude todos os bits no lugar usando
<<2
(*4
),<<1
(*2
),>>1
(/2
) e>>2
(/4
), depois|
todos juntos.O resto nada mais é do que sabores diferentes de caldeira.
fonte
Mathematica, 34 bytes
Função anônima. Pega uma lista de dígitos binários e gera uma lista preenchida de 8 dígitos binários.
fonte
PowerShell v2 +, 34 bytes
Tradução da resposta de @ LegionMammal978 . Programa completo. Recebe a entrada via argumento da linha de comando como um número binário, gera como uma matriz binária, preenchida com zero.
A
"{0:D8}"-f
parte usa cadeias de formato numérico padrão para preceder0
a entrada$args
. Como o-f
operador suporta a tomada de uma matriz como entrada, dissemos explicitamente para usar o primeiro elemento{0:
, não precisamos fazer o habitual$args[0]
. Encapsulamos essa string em parens e depois indexamos nela[1,3,0,5,2,7,4,6]
com a tecelagem. A matriz resultante é deixada no pipeline e a saída é implícita.Exemplos
(o padrão
.ToString()
para uma matriz tem o separador como`n
, é por isso que a saída é nova linha separada aqui)fonte
Matlab,
494844 bytesRecebe a entrada como uma sequência de valores binários. Saída acolchoada. 4 bytes salvos graças ao @Luis Mendo.
Explicação:
fonte
V , 17 bytes
Experimente online!
Isso leva entrada e saída em binário. A maior parte da contagem de bytes vem do preenchimento com zeros. Se o preenchimento da entrada fosse permitido, poderíamos simplesmente:
Graças à solução de Martin pelo método de troca de caracteres, por exemplo:
Explicação:
fonte
05AB1E,
1412 bytesExplicação
A entrada está na base 10.
saída está na base 2.
Empresta o truque de permutação de permutação da resposta CJam de MartinEnder
Experimente online
fonte
Pitão, 19 caracteres
Entrada e saída são a base 2.
Longe de ser um especialista em Pyth, mas como ninguém mais respondeu com isso, eu tentei.
Explicação:
fonte
Labirinto ,
2726 bytesEntrada e saída na base 2. A saída é preenchida.
Experimente online!
fonte
UGL , 50 bytes
Experimente online!
Div-mod repetidamente por 2 e, em seguida,
%
troque e@
role para obtê-los na ordem certa.Entrada na base dez, saída na base dois.
fonte
vi, 27 bytes
Onde
<ESC>
representa o caractere de escape. A E / S está em binário, a saída é preenchida. 24 bytes no vim:fonte
<ESC>
precisa de retalhos em volta dele. Eu tinha editar, mas eu não consigo descobrir mais 4 bytes para a mudança ...Na verdade, 27 bytes
Experimente online!
Este programa faz entrada e saída como uma sequência binária (a saída é preenchida com zero a 8 bits).
Explicação:
fonte
JavaScript, 98 bytes
A entrada é obtida na base-2 como uma string, a saída também é na base-2 como uma string
fonte