Erstellen Sie eine Routine, die ein Array von Blöcken in einem numerischen Basissystem verwendet, und konvertieren Sie sie in ein Array von Blöcken in einem anderen numerischen Basissystem. Sowohl das Von- als auch das Bis-System sind beliebig und sollten als Parameter akzeptiert werden. Das Eingabearray kann eine beliebige Länge haben (Wenn eine Sprache verwendet wird, in der keine Arraylängen mit dem Array gespeichert sind, z. B. C, sollte ein Längenparameter an die Funktion übergeben werden).
So sollte es funktionieren:
fromArray = [1, 1]
fromBase = 256
toBase = 16
result = convertBase(fromArray, fromBase, toBase);
Welche sollten zurückkehren [0, 1, 0, 1]
oder möglicherweise [1, 0, 1]
(führende 0
s sind optional, da sie den Wert der Antwort nicht ändern).
Hier sind einige Testvektoren:
Identitätstestvektor
fromArray = [1, 2, 3, 4] fromBase = 16 toBase = 16 result = [1, 2, 3, 4]
Trivialer Testvektor
fromArray = [1, 0] fromBase = 10 toBase = 100 result = [10]
Großer Testvektor
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]
Wirklich großer Testvektor
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]
Ungleichmäßiger Basisvektor
fromArray = [41, 42, 43] fromBase = 256 toBase = 36 result = [1, 21, 29, 22, 3]
Andere Kriterien / Regeln:
Alle ganzzahligen Variablen sollten für alle vernünftigen Eingabebereiche in eine standardmäßige 32-Bit-Ganzzahl mit Vorzeichen passen.
Sie können in eine Zwischendarstellung konvertieren, solange der Vermittler nur ein Array von 32-Bit-Ganzzahlen mit Vorzeichen ist.
Erwarten Sie, Basen von 2 bis 256 zu handhaben. Es besteht keine Notwendigkeit, höhere Basen als diese zu unterstützen (aber wenn Sie möchten, auf jeden Fall).
Erwarten Sie Eingangs- und Ausgangsgrößen von mindestens bis zu 1000 Elementen. Eine Lösung, die auf 2 ^ 32-1 Elemente skaliert, wäre besser, aber 1000 ist in Ordnung.
Hier geht es nicht unbedingt darum, den kürzesten Code zu haben, der diese Regeln erfüllt. Es geht darum, den saubersten und elegantesten Code zu haben.
Nun, das ist nicht gerade trivial, also könnte eine Antwort, die fast funktioniert, akzeptiert werden!