Contexte
La plupart des gens ici devraient être familiers avec plusieurs systèmes de base: décimal, binaire, hexadécimal, octal. Par exemple, dans le système hexadécimal, le nombre 12345 16 représenterait
1*16^4 + 2*16^3 + 3*16^2 + 4*16^1 + 5*16^0
Notez que nous ne nous attendons généralement pas à ce que la base (ici 16
) change d'un chiffre à l'autre.
Une généralisation de ces systèmes de position habituels vous permet d'utiliser une base numérique différente pour chaque chiffre. Par exemple, si nous alternions entre le système décimal et binaire (en commençant par la base 10 dans le chiffre le moins significatif), le nombre 190315 [2,10] représenterait
1*10*2*10*2*10 + 9*2*10*2*10 + 0*10*2*10 + 3*2*10 + 1*10 + 5 = 7675
Nous désignons cette base comme [2,10]
. La base la plus à droite correspond au chiffre le moins significatif. Ensuite, vous passez par les bases (à gauche) en parcourant les chiffres (à gauche), en vous retournant s'il y a plus de chiffres que de bases.
Pour plus de lecture, voir Wikipedia .
Le défi
Écrivez un programme ou une fonction qui, étant donné une liste de chiffres, D
une base d'entrée I
et une base de sortie O
, convertit l'entier représenté par D
de base I
en base O
. Vous pouvez saisir des données via STDIN, ARGV ou un argument de fonction et renvoyer le résultat ou l'imprimer dans STDOUT.
Vous pouvez supposer:
- que les nombres
I
etO
sont tous supérieurs à1
. - la
I
etO
sont non vides. - que le numéro d'entrée est valide dans la base donnée (c'est-à-dire, aucun chiffre plus grand que sa base).
D
pourrait être vide (représentant 0
) ou pourrait avoir des zéros non significatifs. Votre sortie ne doit pas contenir de zéros non significatifs. En particulier, un résultat représentant 0
doit être renvoyé sous forme de liste vide.
Vous ne devez utiliser aucune fonction de conversion de base intégrée ou tierce.
Il s'agit du code golf, la réponse la plus courte (en octets) l'emporte.
Exemples
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 l'entrée est[0]