Dado un entero binario incluido entre 0
y 1111111111111111
(es decir, un entero sin signo de 16 bits) como entrada, genera el mismo entero en negabinario .
La entrada puede estar en el formato que sea más conveniente para su idioma; por ejemplo, si es más fácil para el programa manejar la entrada con 16 dígitos, como 0000000000000101
, en lugar de simplemente 101
, puede escribir el programa para aceptar solo la entrada de esa manera.
Muestra de E / S
> 1
1
> 10
110
> 1010
11110
> 110111001111000
11011001110001000
> 1001001
1011001
Aquí hay un programa de muestra que escribí que realiza conversiones de bases, incluidas bases negativas y no enteras. Puedes usarlo para verificar tu trabajo.
code-golf
binary
base-conversion
Peter Olson
fuente
fuente
0
sy1
s. Me parece claro, pero una respuesta me hace dudar ligeramente ...Respuestas:
APL, 21 caracteres
Usé Dyalog APL para esto, con el
⎕IO
conjunto a 0, lo que nos permite indexar matrices que comienzan en 0 en lugar de 1.Explicación, de derecha a izquierda:
⍞
nos da la entrada del usuario como un vector de caracteres.⍎¨
aplica la función de ejecución (⍎
) a cada (¨
) de los caracteres antes mencionados, lo que da como resultado un vector de enteros 1 y 0.2⊥
decodifica el vector de la base 2 en decimal.-
niega el entero decimal resultante.(16/¯2)⊤
codifica el entero decimal en base¯2
(negativo 2). (16/¯2
replica¯2
,16
tiempos, produciendo 16 dígitos en nuestro número negabinario).-
niega cada elemento de nuestro número recién codificado (antes de esto, consiste en -1 y 0), para que podamos usarlo para indexar nuestro vector de caracteres.'01'[ ... ]
indexa la matriz de caracteres ('01'
) usando los 0 y 1 del vector negabinario negado. Esto es para obtener una salida más bonita.Ejemplo:
fuente
Ruby,
3231 caracteresUtiliza el atajo de cálculo negabinario .
fuente
gets
palabra clave, que se obtiene de STDIN.GolfScript,
342927 caracteresUn enfoque sencillo y directo. Es bastante interesante que la versión más corta es la que primero se convierte en número y luego vuelve a la base -2 (al menos la versión más corta que pude encontrar hasta ahora). Pero lo bueno de este es que contiene casi el 15%
%
.Edición 1: para la base 2 podemos guardar una operación de módulo y también unir ambos bucles.
Edición 2: Encontré un código aún más corto para convertir una cadena binaria a entero
fuente
Haskell,
8683 bytesLlame usando c y luego una matriz entera para dígitos, p. Ej.
PD: Soy nuevo, ¿lo envié correctamente?
EDITAR: guardé algunos bytes gracias a Laikoni y también arreglé algunos errores tipográficos
EDIT2: Alternativamente, c :: String -> String:
Para 114 bytes (pero lo llama con una cadena: c "11")
fuente
undigits 2 n
, porque la aplicación de función se une más fuerte que la+m
. También puede guardar algunos bytes mediante la uniónm
de un guardia:c n|m<-0xAAAAAAAA= ...
.Python (2.x), 77 caracteres
(No tan corto como las otras soluciones debido a la necesidad de cambiar manualmente la base ...) Debe satisfacer los requisitos.
¡Sugerencias para mejoras adicionales son bienvenidas!
Aliméntelo con valores iniciales como este:
0b1001001
fuente
JavaScript, 68 bytes
Sería 52 bytes en ES6, pero eso es posterior al desafío:
fuente
Jelly , 4 bytes, desafío de fechas posteriores al idioma
Pruébalo en línea!
Toma entrada y produce salida, como una lista de dígitos.
Explicación
Esto es prácticamente solo una traducción directa de la especificación.
fuente
k, 17 bytes sin competencia
Algunas de las características utilizadas probablemente sean posteriores al desafío.
La entrada es una lista de 1 y 0, y la salida también es una lista de 1 y 0.
fuente
PHP, 69 bytes
Versión en línea
fuente
ES8, 54B
fuente
05AB1E , 4 bytes
Pruébalo en línea!
fuente
Japt , 4 bytes
Entrada como una cadena binaria, salida como una matriz de dígitos negabinarios.
Intentalo
O, tomando la entrada como una matriz de dígitos binarios:
Intentalo
fuente