fundo
A maioria das pessoas aqui deve estar familiarizada com vários sistemas básicos: decimal, binário, hexadecimal, octal. Por exemplo, no sistema hexadecimal, o número 12345 16 representaria
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Observe que geralmente não esperamos que a base (aqui 16
) mude de dígito para dígito.
Uma generalização desses sistemas posicionais usuais permite usar uma base numérica diferente para cada dígito. Por exemplo, se estivéssemos alternando entre sistema decimal e binário (começando com a base 10 no dígito menos significativo), o número 190315 [2,10] representaria
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Denotamos essa base como [2,10]
. A base mais à direita corresponde ao dígito menos significativo. Então você percorre as bases (à esquerda) enquanto percorre os dígitos (à esquerda), contornando se há mais dígitos do que bases.
Para ler mais, consulte a Wikipedia .
O desafio
Escreva um programa ou função que, dada uma lista de dígitos, D
uma base de entrada I
e uma base de saída O
, converta o número inteiro representado por D
de base I
em base O
. Você pode receber entradas via STDIN, ARGV ou argumento de função e retornar o resultado ou imprimi-lo em STDOUT.
Você pode assumir:
- que os números em
I
eO
são todos maiores que1
. - o
I
eO
não estão vazios. - que o número de entrada é válido na base fornecida (ou seja, nenhum dígito maior que sua base).
D
pode estar vazio (representando 0
) ou pode ter zeros à esquerda. Sua saída não deve conter zeros à esquerda. Em particular, um resultado representando 0
deve ser retornado como uma lista vazia.
Você não deve usar nenhuma função de conversão básica interna ou de terceiros.
Isso é código de golfe, a resposta mais curta (em bytes) vence.
Exemplos
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] []
[]
se a entrada é[0]