Considere os dígitos de qualquer base integral acima de uma, listados em ordem. Subdividi-los exatamente ao meio repetidamente até que cada pedaço de dígitos tenha um comprimento ímpar:
Base Digits Subdivided Digit Chunks
2 01 0 1
3 012 012
4 0123 0 1 2 3
5 01234 01234
6 012345 012 345
7 0123456 0123456
8 01234567 0 1 2 3 4 5 6 7
9 012345678 012345678
10 0123456789 01234 56789
11 0123456789A 0123456789A
12 0123456789AB 012 345 678 9AB
...
16 0123456789ABCDEF 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
Agora, para qualquer linha nesta tabela, leia os blocos de dígitos subdivididos como números na base dessa linha e some-os. Dê o resultado na base 10 por conveniência.
Por exemplo...
- para a base 3, existe apenas um número para somar: 012 3 = 12 3 = 5 10
- para a base 4, existem 4 números para somar: 0 4 + 1 4 + 2 4 + 3 4 = 12 4 = 6 10
- base 6: 012 6 + 345 6 = 401 6 = 145 10
- base 11: 0123456789A 11 = 2853116705 10
Desafio
Escreva um programa que utilize um número inteiro maior que um como base e execute esse procedimento de soma subdividida, produzindo a soma final na base 10 . (Portanto, se a entrada é 3a saída 5, se a entrada é 6a saída 145, etc.)
Escreva uma função que pegue e retorne um número inteiro (ou string, pois os números podem ficar muito grandes) ou use stdin / stdout para inserir e gerar valores.
O código mais curto em bytes vence.
Notas
- Você pode usar qualquer função de conversão básica incorporada ou importada.
- Não há limite superior para o valor de entrada (além de um razoável
Int.Max). Os valores de entrada não param em 36 apenas porque "Z" para aí .
.
.
.