Considere los dígitos de cualquier base integral por encima de uno, enumerados en orden. Subdivídalos exactamente por la mitad repetidamente hasta que cada trozo de dígitos tenga una longitud impar:
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
...
Ahora, para cualquier fila de esta tabla, lea los fragmentos de dígitos subdivididos como números en la base de esa fila y suméelos. Proporcione el resultado en base 10 para mayor comodidad.
Por ejemplo...
- para la base 3 solo hay un número para sumar: 012 3 = 12 3 = 5 10
- para la base 4 hay 4 números para sumar: 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
Desafío
Escriba un programa que tome un entero mayor que uno como base y realice este procedimiento de subdivisión de la suma, generando la suma final en la base 10 . (Entonces, si la entrada es 3
la salida es 5
, si la entrada es 6
la salida es 145
, etc.)
Escriba una función que tome y devuelva un número entero (o una cadena ya que los números pueden ser bastante grandes) o use stdin / stdout para ingresar y generar los valores.
El código más corto en bytes gana.
Notas
- Puede usar cualquier función de conversión base incorporada o importada.
- No hay límite superior para el valor de entrada (además de un valor razonable
Int.Max
). Los valores de entrada no se detienen en 36 solo porque "Z" se detiene allí .