O objetivo desse desafio é escrever um programa para converter uma sequência inserida do que pode ser assumido como contendo apenas letras e números de tantas bases entre 2 e 36 quanto possível e encontrar a soma da base 10 dos resultados.
A cadeia de caracteres de entrada será convertido para todas as bases em que o número poderia ser definidas de acordo com o alfabeto padrão de bases até 36: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Por exemplo, a entrada 2T
seria válida apenas nas bases 30 e superiores. O programa converteria 2T das bases 30 a 36 em decimal e somaria os resultados.
Você pode assumir que a sequência de entrada contém apenas letras e números. Seu programa pode usar maiúsculas ou minúsculas; ele pode, mas não precisa, suportar os dois.
Casos de teste
Entrada de amostra: 2T
Quadro de possíveis bases
Base Value
30 89
31 91
32 93
33 95
34 97
35 99
36 101
Saída: 665
Entrada de amostra: 1012
Quadro de possíveis 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
Saída: 444278
Entrada de amostra: HELLOworld
Quadro de possíveis bases
Base Value
33 809608041709942
34 1058326557132355
35 1372783151310948
36 1767707668033969
Saída: 5008425418187214
Uma entrada de 0
seria lida como 0
em todas as bases entre 2 e 36 inclusive. Não existe base 1.
Isso é código de golfe. Aplicam-se regras padrão. O menor código em bytes vence.
fonte
0
0
um caso de teste importante?0
está0
em todas as bases e não existe base 1. #Respostas:
Python 3,
727169 bytesAgradecemos a FryAmTheEggman por salvar um byte!
Obrigado ao DSM por economizar 2 bytes!
fonte
try
except
deixará você fazerrange(37)
. Dois bytes!Pitão,
201911 bytesRoubou descaradamente a idéia de Adnan de sua resposta em Python.
Experimente aqui
fonte
S
char1012
.Pure Bash (sem utilitários), 38
Supondo que conversões básicas internas sejam permitidas:
Isso produzirá um erro para STDERR. Estou assumindo que está tudo bem, de acordo com esta meta resposta .
Saída de teste:
fonte
Mathematica, 57 bytes
fonte
FromDigits
.Sério, 65 bytes
Contém não imprimíveis, hexdump:
Infelizmente, não tenho uma boa maneira de filtrar de uma lista com base em tipos. Nota para si mesmo: adicione isso.
Toma entrada como
"2T"
Experimente on-line (você precisará inserir manualmente a entrada)
Explicação:
fonte
Matlab, 98 bytes
fonte
Oitava,
7573 bytesExplicação:
polyval
tem uma vantagembase2dec
em ser vetorizada, portanto, nenhumfor
loop é necessário.Apenas '0' .. '9' e maiúsculas 'A' .. 'Z' são suportados como entrada.
fonte
polyval
vetorizar!Japonês , 26 bytes
Experimente online!
Ungolfed e explicação
fonte
Pitão, 16 bytes
Experimente online
Explicação:
fonte
CJam,
2827 bytesAgradecemos a Reto Koradi por economizar 1 byte.
Isso é meio horrível ...
Requer letras maiúsculas.
Teste aqui.
Como o CJam não possui conversão interna de base 36 a partir de strings, temos que escrever as strings por nós mesmos. Eu tenho tentado todos os tipos de travessuras divmod, mas parece ser o mais curto para construir uma sequência de todos os 36 dígitos e apenas encontrar o índice de cada caractere nessa sequência.
fonte
q{'0-_9>7*-}%
é tão curto.Função C, 93 (somente saída inteira de 32 bits)
Assumindo que está OK para a saída subir apenas para INT_MAX, podemos fazer isso:
O último caso de teste implica que isso provavelmente não é suficiente. Nesse caso, com números inteiros de 64 bits, temos:
Função C, 122
Infelizmente,
#include <stdlib.h>
é necessário que o tipo de retornostrtoll()
esteja correto. Precisamos usarlong long
para lidar com oHELLOworld
testcase. Caso contrário, isso poderia ser um pouco mais curto.Driver de teste:
Saída de teste:
fonte
#include <stdlib.h>
como em C ++?Python 3, 142 bytes
Adnan me bateu profundamente com a solução deles, mas eu queria adicionar minha própria tentativa.
Esta função lida apenas com entradas maiúsculas. Adicione
.upper()
afor i in s
, e ele manipulará maiúsculas e minúsculas.fonte
Scala 2.11, 93 bytes
Isso é executado no console scala.
fonte
Haskell, 97 bytes
Suporta apenas caracteres minúsculos. Exemplo de uso:
É tão massivo, porque eu mesmo tenho que implementar a conversão de char para ASCII e base. As funções predefinidas correspondentes estão em módulos que exigem importações ainda mais caras.
Como funciona:
i
converte um caracterec
em seu valor de dígito (por exemploi 't'
- ->29
).f
calcula o valor da sequência de entrada para cada base possível e a soma. Uma versão não-pointfree do loop interno émap (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ]
.fonte
JavaScript (ES6), 86 bytes
Explicação
Teste
Mostrar snippet de código
fonte
&&b=v
economiza 1 byte?b=v:0
.Perl 6 , 35 bytes
uso:
fonte
Ceilão,
10096 bytesEu tive essa versão mais simples pela primeira vez, com apenas 69 bytes:
Mas isso falha com o primeiro caso de teste, retornando em
2000000000665
vez de665
. ( O motivo é que oT
in2T
é analisado como Tera, ou seja, multiplica o 2 por 10 ^ 12, quando o raio é 10. ) Portanto, precisamos pegar esse caso separadamente. Agradecemos a Neil por sugerir uma maneira diferente de fazer isso, que economizou 4 bytes.Formatado:
fonte