Antecedentes
La mayoría de las personas aquí deben estar familiarizadas con varios sistemas base: decimal, binario, hexadecimal, octal. Por ejemplo, en el sistema hexadecimal, el número 12345 16 representaría
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Tenga en cuenta que generalmente no esperamos que la base (aquí 16
) cambie de un dígito a otro.
Una generalización de estos sistemas posicionales habituales le permite utilizar una base numérica diferente para cada dígito. Por ejemplo, si estuviéramos alternando entre el sistema decimal y binario (comenzando con la base 10 en el dígito menos significativo), el número 190315 [2,10] representaría
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Denotamos esta base como [2,10]
. La base más a la derecha corresponde al dígito menos significativo. Luego pasas por las bases (a la izquierda) a medida que avanzas por los dígitos (a la izquierda), envolviéndote si hay más dígitos que bases.
Para leer más, ver Wikipedia .
El reto
Escriba un programa o función que, dada una lista de dígitos, D
una base de entrada I
y una base de salida O
, convierta el entero representado por D
de base I
a base O
. Puede recibir información a través de STDIN, ARGV o argumento de función y devolver el resultado o imprimirlo en STDOUT.
Puedes asumir:
- que los números en
I
yO
son todos mayores que1
. - los
I
yO
no están vacíos. - que el número de entrada es válido en la base dada (es decir, ningún dígito mayor que su base).
D
podría estar vacío (que representa 0
) o podría tener ceros a la izquierda. Su salida no debe contener ceros a la izquierda. En particular, un resultado que representa 0
debe ser devuelto como una lista vacía.
No debe utilizar ninguna función de conversión de base integrada o de terceros.
Este es el código de golf, gana la respuesta más corta (en bytes).
Ejemplos
D I O Result
[1,0,0] [10] [2] [1,1,0,0,1,0,0]
[1,0,0] [2] [10] [4]
[1,9,0,3,1,5] [2,10] [10] [7,6,7,5]
[1,9,0,3,1,5] [2,10] [4,3,2] [2,0,1,1,0,1,3,0,1]
[52,0,0,0,0] [100,7,24,60,60] [10] [3,1,4,4,9,6,0,0]
[0,2,10] [2,4,8,16] [42] [1,0]
[] [123,456] [13] []
[0,0] [123,456] [13] []
[]
si la entrada es[0]