1つの数値ベースシステムのブロックの配列を取り、それらを別の数値ベースシステムのブロックの配列に変換するルーチンを作成します。fromシステムとtoシステムはどちらも任意であり、パラメーターとして受け入れる必要があります。入力配列は任意の長さにすることができます(Cなど、配列の長さが配列に格納されていない言語を使用している場合は、長さパラメーターを関数に渡す必要があります)。
以下にその仕組みを示します。
fromArray = [1, 1]
fromBase = 256
toBase = 16
result = convertBase(fromArray, fromBase, toBase);
どちらが返される[0, 1, 0, 1]
か、または返される可能性があります[1, 0, 1]
(先頭0
のは、回答の値を変更しないため、オプションです)。
ここにいくつかのテストベクトルがあります:
アイデンティティテストベクトル
fromArray = [1, 2, 3, 4] fromBase = 16 toBase = 16 result = [1, 2, 3, 4]
簡単なテストベクトル
fromArray = [1, 0] fromBase = 10 toBase = 100 result = [10]
大きなテストベクトル
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]
本当に大きなテストベクトル
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]
偶数でない基底ベクトル
fromArray = [41, 42, 43] fromBase = 256 toBase = 36 result = [1, 21, 29, 22, 3]
その他の基準/ルール:
すべての整変数は、すべての正気な入力範囲に対して、標準の32ビット符号付き整数内に収まる必要があります。
中間が32ビットの符号付き整数の配列にすぎない限り、中間表現に変換できます。
2から256までのベースを処理することを期待します。それ以上のベースをサポートする必要はありません(ただし、必要に応じて)。
少なくとも 1000要素までの入力サイズと出力サイズを処理する必要があります。2 ^ 32-1要素にスケーリングするソリューションの方が優れていますが、1000で十分です。
これは、必ずしもこれらのルールを満たす最短のコードを使用することに関するものではありません。それは最もクリーンで最もエレガントなコードを持つことです。
さて、これは簡単なことではないので、ほとんど機能する答えが受け入れられる可能性があります。