Crie uma rotina que utilize uma matriz de blocos em um sistema básico numérico e converta-os em uma matriz de blocos em outro sistema básico numérico. Os sistemas de e para são arbitrários e devem ser aceitos como parâmetro. A matriz de entrada pode ter um comprimento arbitrário (se estiver usando um idioma em que os comprimentos da matriz não sejam armazenados com a matriz, como C, um parâmetro de comprimento deverá ser passado para a função).
Eis como deve funcionar:
fromArray = [1, 1]
fromBase = 256
toBase = 16
result = convertBase(fromArray, fromBase, toBase);
O que deve retornar [0, 1, 0, 1]
ou possivelmente [1, 0, 1]
(os principais à esquerda 0
são opcionais, pois não alteram o valor da resposta).
Aqui estão alguns vetores de teste:
Vetor de teste de identidade
fromArray = [1, 2, 3, 4] fromBase = 16 toBase = 16 result = [1, 2, 3, 4]
Vetor de teste trivial
fromArray = [1, 0] fromBase = 10 toBase = 100 result = [10]
Vetor grande teste
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]
Vetor de teste realmente grande
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]
Vetor base não uniforme
fromArray = [41, 42, 43] fromBase = 256 toBase = 36 result = [1, 21, 29, 22, 3]
Outros critérios / regras:
Todas as variáveis inteiras devem caber em um número inteiro assinado de 32 bits padrão para todos os intervalos de entrada sãos.
Você pode converter em uma representação intermediária, desde que o intermediário não seja nada além de uma matriz de números inteiros assinados em 32 bits.
Espere manipular bases de 2 a 256. Não há necessidade de oferecer suporte a bases mais altas do que isso (mas se você quiser, por todos os meios).
Espere lidar com tamanhos de entrada e saída de pelo menos até 1000 elementos. Uma solução que escala para 2 ^ 32-1 elementos seria melhor, mas 1000 é bom.
Não se trata necessariamente de ter o código mais curto que atenda a essas regras. É sobre ter o código mais limpo e elegante.
Agora, isso não é exatamente trivial, portanto, uma resposta que quase funcione pode ser aceita!