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, Duma base de entrada Ie uma base de saída O, converta o número inteiro representado por Dde base Iem 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
IeOsão todos maiores que1. - o
IeOnão estão vazios. - que o número de entrada é válido na base fornecida (ou seja, nenhum dígito maior que sua base).
Dpode estar vazio (representando 0) ou pode ter zeros à esquerda. Sua saída não deve conter zeros à esquerda. Em particular, um resultado representando 0deve 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]