Nota: la primera mitad de este desafío proviene del desafío anterior de Martin Ender, Visualize Bit Weaving .
El lenguaje de programación esotérico evil tiene una operación interesante sobre los valores de bytes que llama "tejido".
Es esencialmente una permutación de los ocho bits del byte (no importa desde qué extremo comencemos a contar, ya que el patrón es simétrico):
- El bit 0 se mueve al bit 2
- El bit 1 se mueve al bit 0
- El bit 2 se mueve al bit 4
- El bit 3 se mueve al bit 1
- El bit 4 se mueve al bit 6
- El bit 5 se mueve al bit 3
- El bit 6 se mueve al bit 7
- El bit 7 se mueve al bit 5
Por conveniencia, aquí hay otras tres representaciones de la permutación. Como un ciclo:
(02467531)
Como mapeo:
57361402 -> 76543210 -> 64725031
Y como una lista de pares de mapeo:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Después de los 8
tejidos, el byte se restablece esencialmente.
Por ejemplo, tejer el número 10011101
(que está 157
en la base 10) producirá 01110110
(que está 118
en la base 10).
Entrada
Solo hay 256
entradas válidas, es decir, todos los enteros entre 0
e 255
inclusive. Puede tomarse en cualquier base, pero debe ser coherente y debe especificarlo si la base que elige no es la base diez.
No puede poner a cero sus entradas.
Salida
Debe generar el resultado del tejido de bits, en cualquier base, que también debe ser coherente y especificado si no es la base diez.
Puede poner a cero sus salidas.
Relacionado: Visualice el tejido de bits
fuente
Respuestas:
Python 2.7,
44-> 36 bytesfuente
|
lugar de+
y enmascarar después del cambio, puede eliminar 8 bytes eliminando paréntesis.<strike></strike>
alrededor de tu puntaje de byte anterior para indicar el progreso :-)Mal, 3 personajes
Pruébalo en línea!
La entrada está en la base 256 (por ejemplo, ASCII), por ejemplo, para ingresar el dígito 63, ingrese ASCII 63, que es
?
.Explicación:
Esto por lo que se siente como hacer trampa.
fuente
CJam,
1512 bytesGracias a FryAmTheEggman por guardar 3 bytes.
Entrada en base 2. Salida también en base 2, acolchada a 8 bits con ceros.
Pruébalo aquí.
Explicación
fuente
MATL , 14 bytes
La entrada está en decimal. La salida es binaria con relleno cero.
Pruébalo en línea!
Explicación
fuente
Jalea, 11 bytes
Traducción de la respuesta de Martin CJam. Pruébalo aquí.
fuente
JavaScript (ES6), 30 bytes
fuente
J, 12 bytes
Utiliza el permute incorporado
A.
con el índice de permutación6532
que corresponde a la operación de tejido de bits.Uso
La entrada es una lista de dígitos binarios. La salida es una lista con relleno de cero de 8 dígitos binarios.
Explicación
fuente
Retina , 39 bytes
Entrada y salida en la base 2, la salida se rellena a la izquierda.
Pruébalo en línea!
Explicación
Esto simplemente rellena la entrada con ceros. los
+
indica que esta etapa se repite hasta que la cadena deja de cambiar. Coincide con el comienzo de la cadena siempre que contenga menos de 8 caracteres e inserte un0
en esa posición.Ahora para la permutación real. La solución directa es esta:
Sin embargo, eso es dolorosamente largo y redundante. Encontré una formulación diferente de la permutación que es mucho más fácil de implementar en Retina (
X
representa un intercambio de bits adyacentes):Ahora eso es mucho más fácil de implementar:
Esto simplemente coincide con dos personajes y los intercambia. Como las coincidencias no se superponen, esto intercambia los cuatro pares.
Ahora queremos volver a hacer lo mismo, pero queremos omitir el primer personaje. La forma más fácil de hacerlo es exigir que la coincidencia no comience en un límite de palabra con
\B
.fuente
código de máquina x86, 20 bytes
En hexadecimal:
Es un procedimiento que toma datos y devuelve resultados a través del registro AL
Desmontaje
fuente
C (macro insegura), 39 bytes
C (función), 41 bytes
C (programa completo), 59 bytes
(regresa a través del código de salida, así que invoque con
echo "157" | ./weave;echo $?
)C (programa completo compatible con los estándares), 86 bytes
C (programa completo compatible con los estándares sin advertencias del compilador), 95 bytes
C (programa completo compatible con los estándares sin advertencias del compilador que puede leer argumentos o stdin e incluye verificación de error / rango), 262 bytes
Descompostura
Más o menos lo mismo que muchas respuestas existentes: desplazar todos los bits en su lugar utilizando
<<2
(*4
),<<1
(*2
),>>1
(/2
) y>>2
(/4
), luego|
todo junto.El resto no es más que diferentes sabores de caldera.
fuente
Mathematica, 34 bytes
Función anónima. Toma una lista de dígitos binarios y genera una lista acolchada de 8 dígitos binarios.
fuente
PowerShell v2 +, 34 bytes
Traducción de la respuesta de @ LegionMammal978 . Programa completo Toma la entrada a través del argumento de la línea de comandos como un número binario, emite como una matriz binaria, con relleno de cero.
La
"{0:D8}"-f
parte utiliza cadenas de formato numérico estándar para anteponer0
a la entrada$args
. Dado que el-f
operador admite tomar una matriz como entrada, y hemos dicho explícitamente que use el primer elemento{0:
, no necesitamos hacer lo habitual$args[0]
. Encapsulamos esa cadena en parens, luego la indexamos[1,3,0,5,2,7,4,6]
con el tejido. La matriz resultante se deja en la tubería y la salida es implícita.Ejemplos
(el valor predeterminado
.ToString()
para una matriz tiene el separador como`n
, por eso la salida está separada por una nueva línea aquí)fuente
Matlab,
494844 bytesToma la entrada como una cadena de valores binarios. Salida acolchada. 4 bytes guardados gracias a @Luis Mendo.
Explicación:
fuente
V , 17 bytes
Pruébalo en línea!
Esto toma entrada y salida en binario. La mayor parte del recuento de bytes proviene de rellenarlo con ceros. Si se permitiera rellenar la entrada, podríamos hacer:
Gracias a la solución de Martin para el método de intercambio de caracteres, por ejemplo:
Explicación:
fuente
05AB1E,
1412 bytesExplicación
La entrada está en la base 10.
salida está en la base 2.
Toma prestado el truco de permutación de la respuesta CJam de MartinEnder
Pruébalo en línea
fuente
Pyth, 19 caracteres
Entrada y salida son base 2.
Lejos de ser un experto en Pyth, pero como nadie más ha respondido con él, lo intenté.
Explicación:
fuente
Laberinto ,
2726 bytesEntrada y salida en la base 2. La salida está acolchada.
Pruébalo en línea!
fuente
UGL , 50 bytes
Pruébalo en línea!
Repetidamente div-mod por 2, y luego
%
intercambia y@
rueda para obtenerlos en el orden correcto.Entrada en base diez, salida en base dos.
fuente
vi, 27 bytes
Donde
<ESC>
representa el personaje de Escape. I / O está en binario, la salida está rellenada 24 bytes en vim:fuente
<ESC>
necesita backticks a su alrededor. Lo editaría, pero no puedo calcular 4 bytes más para cambiar ...En realidad, 27 bytes
Pruébalo en línea!
Este programa ingresa y emite como una cadena binaria (la salida se rellena con ceros hasta 8 bits).
Explicación:
fuente
JavaScript, 98 bytes
La entrada se toma en base-2 como una cadena, la salida también es en base-2 como una cadena
fuente