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 2T
serí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 0
se leería como 0
en 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
0
0
un caso de prueba importante?0
está0
en 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
try
except
te dejará hacerrange(37)
. ¡Dos bytes!Pyth,
201911 bytesSe robó descaradamente la idea de Adnan de su respuesta de Python.
Pruébalo aquí
fuente
S
carbó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:
polyval
tiene una ventaja sobrebase2dec
que está vectorizado, por lo que nofor
se requiere bucle.Solo se admiten '0' ... '9' y mayúsculas 'A' ... 'Z' como entrada.
fuente
polyval
vectorizar!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 long
para manejar el caso deHELLOworld
prueba. 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:
i
convierte un carácterc
a su valor de dígito (por ejemplo,i 't'
->29
).f
calcula 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=v
ahorra 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
2000000000665
lugar de665
. ( La razón es que elT
en2T
se 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