sfondo
La maggior parte delle persone qui dovrebbe avere familiarità con diversi sistemi di base: decimale, binario, esadecimale, ottale. Ad esempio nel sistema esadecimale, il numero 12345 16 rappresenterebbe
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Nota che di solito non ci aspettiamo che la base (qui, 16
) cambi da cifra a cifra.
Una generalizzazione di questi soliti sistemi posizionali consente di utilizzare una base numerica diversa per ogni cifra. Ad esempio, se stessimo alternando il sistema decimale e binario (a partire dalla base 10 nella cifra meno significativa), il numero 190315 [2,10] rappresenterebbe
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Indichiamo questa base come [2,10]
. La base più a destra corrisponde alla cifra meno significativa. Quindi attraversi le basi (a sinistra) mentre attraversi le cifre (a sinistra), avvolgendoti se ci sono più cifre delle basi.
Per ulteriori letture, vedi Wikipedia .
La sfida
Scrivi un programma o una funzione che, dato un elenco di cifre, D
una base di input I
e una base di output O
, converte l'intero rappresentato da D
base I
a base O
. È possibile accettare input tramite STDIN, ARGV o argomento della funzione e restituire il risultato o stamparlo su STDOUT.
Puoi presumere:
- che i numeri in
I
eO
sono tutti maggiori di1
. - i
I
eO
sono non vuoti. - che il numero di input sia valido nella base data (ovvero nessuna cifra più grande della sua base).
D
potrebbe essere vuoto (rappresentante 0
) o avere zero iniziali. L'output non deve contenere zero iniziali. In particolare, un risultato che rappresenta 0
deve essere restituito come un elenco vuoto.
Non è necessario utilizzare alcuna funzione di conversione di base incorporata o di terze parti.
Questo è il codice golf, vince la risposta più breve (in byte).
Esempi
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 l'input è[0]