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] []
la source
[]
si l'entrée est[0]
Réponses:
CJam, 45
Enfin, j'ai trouvé une bonne utilisation de
j
.Comment ça fonctionne
Long ArrayList Block j
exécute le bloc qui prend un entier comme paramètre, etLong j
appellera ce bloc récursivement dans le bloc. Il stockera également les valeurs renvoyées par le bloc dans un tableau interne, qui est initialisé par le paramètre tableau. Il n'exécutera pas le bloc si l'entrée est déjà dans le tableau et que la valeur dans le tableau est renvoyée à la place.Donc, si je l'initialise avec un tableau d'un tableau vide, le tableau vide sera retourné pour l'entrée 0, et le bloc sera exécuté pour toute autre entrée.
CJam,
4948L'entrée doit être
O I D
.Exemples:
Comment ça fonctionne
la source
_{}?
truc est vraiment bien.{}e|
est le même.j
? :)CJam,
62615957 octetsLit les tableaux d'entrée à
[O I D]
partir de STDIN. Essayez-le en ligne.Comment ça fonctionne
Cas de test
Notez que les chaînes vides et les tableaux vides ne peuvent pas être distingués de CJam, donc
[]p
imprime""
.la source
Python 2 - 318
J'ai foiré l'ordre des arguments par accident, j'ai donc dû les inverser. Je vais travailler sur la tranche-fu pour faire fonctionner les listes dans l'autre sens plus tard, j'ai déjà perdu toute ma pause déjeuner: pFixé
la source
APL, 78
Exemples:
la source
{{⍵↓⍨1⍳⍨×⍵}(99⍴⎕)⊤⍵⊥⍨⎕⍴⍨⍴⍵}
prend D comme bon argument, puis demande I et O.Python 2 - 122
Très simple, je n'ai pas réussi à trouver d'astuces de golf spéciales sur celui-ci.
Non golfé:
Edit: version du programme de 116 octets grâce à FryAmTheEggman
Cette version accepte les entrées séparées par des virgules, par exemple
[1,9,0,3,1,5], [2,10], [10]
la source
k2 -
8374 carFonction prenant un argument. C'était bien mieux adapté à K qu'à J, c'est pourquoi je n'utilise pas J. Ce serait juste une charge de déchets de boxe / déballage, et personne ne veut ça. C'est dans le dialecte k2 (peut nécessiter une adaptation pour fonctionner dans l'implémentation open source Kona), mais je changerai cela en k4 si je peux y jouer plus court.
Je noterai que je prends position pour la ponctualité ici et que je dis qu'une liste d'articles doit être saisie en tant que telle.
,2
est une liste d'un élément, cet élément étant le scalaire2
. Souvent, les scalaires et les listes à 1 élément sont interchangeables, mais il y a une logique dans ce golf qui repose sur l'hypothèse d'arguments de liste.Pour expliquer le golf, je vais le diviser en deux parties.
F
est le golf,L
est la boucle principale qui calcule la sortie. Le mécanisme exact du bouclage est celui quiL
est appliqué à ses arguments à plusieurs reprises jusqu'à ce que le deuxième argument soit nul, puis ce résultat est renvoyé. (C'est la.[L]/
partie.)Par explosion:
En action:
la source
Perl 6 , 67 octets
Essayez-le
Étendu:
Dans le cas où vous n'êtes pas sûr de ce que le triangle réduit:
Si je pouvais prendre les entrées inversées et produire l'inverse, ce serait 47 octets.
Essayez-le
la source