Escriba una función o programa que genere una base Quater-imaginary mostrada como dígitos binarios. La base numérica es 2 i , donde i es la raíz cuadrada de -1. Ver número complejo para más detalles sobre i . Cada posición de dígito puede ir de 0 a 3 (cuaternario), ya que cada parte real e imaginaria es -4 veces más grande que la parte real e imaginaria anterior. Los dígitos cuaternario en binario son como sigue: 0: 00
, 1: 01
, 2: 10
y 3: 11
.
Desglose de posiciones de dígitos:
re im 16 -8i -4 2i 1 -0.5i, etc.
4 0 1 0 3 0 0 (quaternary representation)
01 00 11 00 00 (binary representation)
El número 100110000
es 1x16 + 3x-4 = 16 + -12 = 4.
re im 16 -8i -4 2i 1 -0.5i, etc.
0 5 0 0 0 3 0 2 (quaternary representation)
00 00 00 11 00 .10 (binary representation)
El número 1100.1
es 3x2 i + 2x-0.5 i = 6 i + - i = 5 i .
Su código tomará un par de números, que podrían ser enteros o de coma flotante, y generará el número complejo como una cadena de dígitos binarios. El primer número será real, el segundo número de entrada será el valor imaginario. Un punto binario solo debe imprimirse si hay posiciones de números distintos de cero por debajo de 1 (es decir, si alguna de las posiciones para -0.5 i , -0.25, 0.125 i , etc. tiene un dígito distinto de cero). Los ceros iniciales y finales no están permitidos, a excepción de un solo dígito cero inmediatamente antes del punto binario si no hay otros dígitos. La salida no debe comenzar con un punto binario (* 00.1
- incorrecto, 0.1
- correcto, * .1
- incorrecto, * 0.10
- incorrecto). Puede suponer que todos los números de entrada tendrán representaciones binarias finitas.
Números de prueba:
re im output
0 0 0
1 0 1
2 0 10
3 0 11
4 0 100110000
-1 0 10011
-2 0 10010
-3 0 10001
0 1 100.1
0 2 100
0 3 1000.1
0 4 1000
0 -1 0.1
0 -2 1001100
0 -3 1001100.1
3 4 1011
4 3 100111000.1
6 -9 101110010.1
-6 9 10011100110.1
-9 -6 1110111
0.5 14.125 10011001101.001001
Nota: La salida de todos los valores enteros terminará .1
si la parte imaginaria es impar.
Código estándar de golf.
fuente
0 → 00, 1 → 01, 2 → 10, 3 → 11
.Respuestas:
JavaScript (ES6), 340 bytes
f
convierte un número en base-4
(con el final.
si el número es un entero).g
toma dos-4
números de base , los coloca en ambos extremos a la misma longitud y.
posición, mezcla los dígitos, convierte todo de base4
a base2
, luego finalmente elimina los ceros iniciales y finales.Explicación: Para representar el número complejo dado en base modificada
2i
, necesitamos representar la parte real y la mitad de la parte compleja (es decir, dividir la parte imaginaria por2i
) en base2i²
(es decir-4
), mezclar los dígitos y luego convertirlos de base4
a la base2
. Para representar un número real en base-4
comenzamos con la4
conversión de base . Los dígitos alternativos tienen el signo correcto (en el caso de un número positivo, estos son los dígitos en las posiciones pares; en el caso de un número negativo, estos son los dígitos en las posiciones impares) pero los dígitos restantes tienen el signo incorrecto y una corrección necesita ser aplicada. Ejemplos:Como puede ver, la corrección es
8
menos el dígito original, mod8
. Sin embargo, un cálculo un poco más conveniente es el dígito original, más 3, xo 3 (de hecho, en la aritmética de enteros de 32 bits podríamos simplemente escribir+0xCCCCCCCC^0xCCCCCCCC
para convertir el número entero de una vez). Finalmente, como la corrección se aplica a dígitos alternativos, es más simple hacer una conversión inicial a base16
que automáticamente recoge pares de4
dígitos base , luego corregir usando un factor de uno3
o0xC
según sea apropiado. Solo queda ignorar el-
letrero.fuente
Perl - 313 bytes
Como nadie ha publicado una respuesta todavía, pensé en sacarla yo mismo.
Estoy seguro de que hay muchas oportunidades para jugar golf más allá.
fuente