Créez une routine qui prend un tableau de blocs dans un système de base numérique et convertissez-les en un tableau de blocs dans un autre système de base numérique. Les systèmes from et to sont arbitraires et doivent être acceptés comme paramètre. Le tableau d'entrée peut être d'une longueur arbitraire (si vous utilisez un langage dans lequel les longueurs de tableau ne sont pas stockées avec le tableau, comme C, un paramètre de longueur doit être transmis à la fonction).
Voici comment cela devrait fonctionner:
fromArray = [1, 1]
fromBase = 256
toBase = 16
result = convertBase(fromArray, fromBase, toBase);
Qui devrait retourner [0, 1, 0, 1]
ou éventuellement [1, 0, 1]
(les 0
s en tête sont facultatifs car ils ne modifient pas la valeur de la réponse).
Voici quelques vecteurs de test:
Vecteur de test d'identité
fromArray = [1, 2, 3, 4] fromBase = 16 toBase = 16 result = [1, 2, 3, 4]
Vecteur de test trivial
fromArray = [1, 0] fromBase = 10 toBase = 100 result = [10]
Grand vecteur de test
fromArray = [41, 15, 156, 123, 254, 156, 141, 2, 24] fromBase = 256 toBase = 16 result = [2, 9, 0, 15, 9, 12, 7, 11, 15, 14, 9, 12, 8, 13, 0, 2, 1, 8]
Vecteur de test vraiment grand
fromArray = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] fromBase = 2 toBase = 10 result = [1, 2, 3, 7, 9, 4, 0, 0, 3, 9, 2, 8, 5, 3, 8, 0, 2, 7, 4, 8, 9, 9, 1, 2, 4, 2, 2, 3]
Vecteur de base non pair
fromArray = [41, 42, 43] fromBase = 256 toBase = 36 result = [1, 21, 29, 22, 3]
Autres critères / règles:
Toutes les variables entières doivent tenir dans un entier signé 32 bits standard pour toutes les plages d'entrée saines.
Vous pouvez convertir en une représentation intermédiaire, tant que l'intermédiaire n'est rien de plus qu'un tableau d'entiers signés 32 bits.
Attendez-vous à gérer des bases de 2 à 256. Il n'est pas nécessaire de prendre en charge des bases plus élevées que cela (mais si vous le souhaitez, certainement).
Attendez-vous à gérer les tailles d'entrée et de sortie d' au moins jusqu'à 1 000 éléments. Une solution qui évolue à 2 ^ 32-1 éléments serait mieux, mais 1000 est très bien.
Il ne s'agit pas nécessairement d'avoir le code le plus court qui répondra à ces règles. Il s'agit d'avoir le code le plus propre et le plus élégant.
Maintenant, ce n'est pas vraiment trivial à faire, donc une réponse qui fonctionne presque pourrait être acceptée!
la source
Réponses:
Python
la source
Voici une solution Haskell
Et en exécutant les tests à partir de la question:
la source
R
Gère plusieurs milliers d'éléments * en moins d'une minute.
* pour> 500 éléments, vous devez augmenter le niveau de récursivité par défaut ou ne pas réinitialiser la
mm
matricedothelocomotion()
Exemples:
la source
Une version JavaScript moins brouillée et plus rapide:
Le temps de calcul augmente comme o (nombre de chiffres 2 ).
Pas très efficace pour les grands nombres.
Les versions spécialisées d'encodage en base64 profitent des ratios de base pour accélérer les calculs.
la source
Javascript
Merci Keith Randall pour votre réponse Python. Je me débattais avec les détails de ma solution et j'ai fini par copier votre logique. Si quelqu'un accorde un vote à cette solution parce qu'elle fonctionne, veuillez également voter pour la solution de Keith.
Les tests
Cela pourrait probablement être beaucoup réduit, mais je veux vraiment l'utiliser pour un petit projet parallèle. Je l'ai donc gardé lisible (un peu) et j'ai essayé de garder les variables en échec.
la source
for each
déclaration obsolète et constructions édifiantes commed.length||e?d.push(e):0
... Est-ce un défi de code obscurci ou quelque chose? Vous pourriez écrire la même chose avec une syntaxe compréhensible et de meilleures performances.Mathematica
Aucune variable définie, aucune entrée acceptée tant qu'elle tient en mémoire.
Essai:
En dehors
la source
Scala:
Code de test avec tests:
Réussi tous les tests.
la source
J,
109105Gère des milliers de chiffres sans transpiration. Aucun entier blessé!
Exemples
Il raccourcit.
la source
Smalltalk, 128
tests:
et pour votre amusement spécial ( défi: comprendre, ce qui est si spécial dans la valeur d'entrée ):
la source