El objetivo de este desafío es escribir un programa para convertir una cadena incorporada de lo que se puede suponer que contiene solo letras y números de tantas bases entre 2 y 36 como sea posible, y encontrar la base 10 de la suma de los resultados.
La cadena de entrada se convertirá a todas las bases en el que se define el número según el alfabeto estándar para bases hasta 36: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ. Por ejemplo, la entrada 2Tsería válida solo en bases 30 y superiores. El programa convertiría 2T de las bases 30 a 36 en decimal y sumaría los resultados.
Puede suponer que la cadena de entrada contiene solo letras y números. Su programa puede usar mayúsculas o minúsculas; puede, pero no necesita, soportar ambos.
Casos de prueba
Entrada de muestra: 2T
Gráfico de posibles bases
Base   Value
30     89
31     91
32     93
33     95
34     97
35     99
36     101
Salida: 665
Entrada de muestra: 1012
Gráfico de posibles bases:
Base   Value
3      32
4      70
5      132
6      224
7      352
8      522
9      740
10     1012
11     1344
12     1742
13     2212
14     2760
15     3392
16     4114
17     4932
18     5852
19     6880
20     8022
21     9284
22     10672
23     12192
24     13850
25     15652
26     17604
27     19712
28     21982
29     24420
30     27032
31     29824
32     32802
33     35972
34     39340
35     42912
36     46694
Salida: 444278
Entrada de muestra: HELLOworld
Gráfico de posibles bases
Base   Value
33     809608041709942
34     1058326557132355
35     1372783151310948
36     1767707668033969
Salida: 5008425418187214
Una entrada de 0se leería como 0en todas las bases entre 2 y 36 inclusive. No existe tal cosa como la base 1.
Este es el código de golf. Aplican reglas estándar. El código más corto en bytes gana.
fuente

00un caso de prueba importante?0está0en cada base, y no existe tal cosa como la base 1.Respuestas:
Python 3,
727169 bytes¡Gracias a FryAmTheEggman por guardar un byte!
¡Gracias a DSM por guardar 2 bytes!
fuente
tryexceptte dejará hacerrange(37). ¡Dos bytes!Pyth,
201911 bytesSe robó descaradamente la idea de Adnan de su respuesta de Python.
Pruébalo aquí
fuente
Scarbón1012.Pure Bash (sin utilidades), 38
Asumiendo que las conversiones base incorporadas están permitidas:
Esto generará un error en STDERR. Supongo que esto está bien según esta meta respuesta .
Prueba de salida:
fuente
Mathematica, 57 bytes
fuente
FromDigits.En serio, 65 bytes
Contiene no imprimibles, hexdump:
Desafortunadamente, no tengo una buena manera de filtrar de una lista basada en tipos. Nota para uno mismo: agregue eso.
Toma entrada como
"2T"Pruébelo en línea (deberá ingresar la entrada manualmente)
Explicación:
fuente
Matlab, 98 bytes
fuente
Octava,
7573 bytesExplicación:
polyvaltiene una ventaja sobrebase2decque está vectorizado, por lo que noforse requiere bucle.Solo se admiten '0' ... '9' y mayúsculas 'A' ... 'Z' como entrada.
fuente
polyvalvectorizar!Japt , 26 bytes
Pruébalo en línea!
Sin golfos y explicación
fuente
Pyth, 16 bytes
Pruébalo en línea
Explicación:
fuente
CJam,
2827 bytesGracias a Reto Koradi por guardar 1 byte.
Esto es un poco horrible ...
Requiere letras mayúsculas.
Pruébalo aquí.
CJam no tiene una conversión de base 36 incorporada de cadenas, por lo que tenemos que escribir las cadenas nosotros mismos. He estado probando todo tipo de travesuras divmod, pero parece ser más corto construir una cadena de los 36 dígitos y solo encontrar el índice de cada personaje en esa cadena.
fuente
q{'0-_9>7*-}%Es igual de corto.Función C, 93 (solo salida de entero de 32 bits)
Suponiendo que está bien que la salida solo suba a INT_MAX, entonces podemos hacer esto:
El último caso de prueba implica que esto probablemente no sea suficiente. Si es así, con enteros de 64 bits tenemos:
Función C, 122
Desafortunadamente,
#include <stdlib.h>se requiere para que el tipo de devoluciónstrtoll()sea correcto. Necesitamos usarlong longpara manejar el caso deHELLOworldprueba. De lo contrario, esto podría ser un poco más corto.Conductor de prueba:
Prueba de salida:
fuente
#include <stdlib.h>como en C ++?Python 3, 142 bytes
Adnan me ha golpeado con su solución, pero quería agregar mi propio intento.
Esta función solo maneja entradas en mayúscula. Agregar
.upper()afor i in s, y manejará tanto mayúsculas como minúsculas.fuente
Scala 2.11, 93 bytes
Esto se ejecuta en la consola scala.
fuente
Haskell, 97 bytes
Solo admite caracteres en minúsculas. Ejemplo de uso:
Es muy masivo, porque tengo que implementar tanto char-to-ASCII como conversión de base. Las funciones predefinidas correspondientes se encuentran en módulos que requieren importaciones aún más caras.
Cómo funciona:
iconvierte un carácterca su valor de dígito (por ejemplo,i 't'->29).fcalcula el valor de la cadena de entrada para cada base posible y lo suma. Una versión sin bucle del bucle interno esmap (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ].fuente
JavaScript (ES6), 86 bytes
Explicación
Prueba
Mostrar fragmento de código
fuente
&&b=vahorra 1 byte?b=v:0.Perl 6 , 35 bytes
uso:
fuente
Ceilán,
10096 bytesPrimero tuve esta versión más simple con solo 69 bytes:
Pero esto falla con el primer caso de prueba, regresando en
2000000000665lugar de665. ( La razón es que elTen2Tse analiza como Tera, es decir, se multiplica el 2 con 10 ^ 12, cuando el radix es 10. ) Por lo tanto tenemos que coger este caso por separado. Gracias a Neil por sugerir una forma diferente de hacer esto que ahorró 4 bytes.Formateado:
fuente