Entrada:
uma lista / matriz de números inteiros para os quais cada item está no intervalo de 2-36
.
Saída:
a soma dos números inteiros (como base 10), onde cada próximo número inteiro está na base do valor anterior (começando com uma base regular 10).
Exemplo:
Digamos que temos uma entrada como esta: [4, 12, 34, 20, 14, 6, 25, 13, 33]
Então temos uma soma como esta:
4 (4 in base-10) +
6 (12 in base-4 ) +
40 (34 in base-12) +
68 (20 in base-34) +
24 (14 in base-20) +
6 (6 in base-14) +
17 (25 in base-6 ) +
28 (13 in base-26) +
42 (33 in base-13)
= 235
Base matemática explicada:
considerei assumir que todos sabem como a base funciona, mas darei um breve exemplo de como funciona, de qualquer maneira, por precaução. Vamos pegar o34 in base-12
exemplo, como chegamos40
?
1-34 in regular base-10:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
So, from 1 to 34 is 34 steps in base-10
1-34 in base-12:
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 30, 31, 32, 33, 34
So, from 1 to 34 is 40 steps in base-12
Aqui está talvez uma calculadora útil.
Regras do desafio:
- O tamanho da matriz estará em um intervalo razoável (
1-100
veja / veja os casos de teste). - Os casos de teste nunca conterão números inteiros cujo valor atual é inválido para sua base anterior (ou seja, você nunca terá algo parecido
19 in base-6
ou6 in base-6
, porque a base-6 contém apenas os dígitos0-5
). - Você pode pegar a entrada da maneira que desejar. Pode ser como um array interno, como uma sequência separada por vírgula / espaço, etc. Sua chamada. (Você também pode reverter a matriz int, o que pode ser útil para linguagens de programação baseadas em pilha.)
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam de golfe. Tente encontrar a resposta mais curta possível para qualquer linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados, programas completos. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
[4, 12, 34, 20, 14, 6, 25, 13, 33] -> 235
4+ 6+ 40+ 68+ 24+ 6+ 17+ 28+ 42
[5, 14, 2, 11, 30, 18] -> 90
5+ 9+ 2+ 3+ 33+ 38
[12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 12, 2, 11, 3, 10, 2, 10] -> 98
12+ 13+ 11+ 9+ 8+ 7+ 6+ 5+ 4+ 3+ 5+ 2+ 3+ 3+ 3+ 2+ 2
[36, 36] -> 150
36+ 114
code-golf
math
base-conversion
Kevin Cruijssen
fonte
fonte
Respostas:
05AB1E ,
765 bytesUsa a codificação 05AB1E .
Economizou 1 byte usando o novo built-in,
š
como sugerido por Kevin CruijssenExplicação
A lista de entrada é invertida, conforme permitido pela especificação de desafio.
Experimente online!
Testinguite modificado
fonte
š
vez de¸ì
. Além disso, sua explicação indica " anexar " em vez de " anexar ". :)Python 3, 40 bytes
Os testes estão no ideone
map(str, a)
cria um gerador,G
que chamastr
cada valora
, convertendo em strings,map(int, G, [10]+a)
cria um gerador que chamaint(g, v)
paresG
e[10]+a
int(g, v)
converte a string ag
partir da base inteirav
(sev
estiver dentro[2,36]
eg
é válido)sum
faz o que diz na latafonte
Python 2, 48 bytes
Os testes estão no ideone
zip(a,[10]+a)
atravessa pares de valores naa
, e o valor anterior ou10
para o primeiroo
backticks
naint
converso chamadax
para uma cadeia,s
int(s, y)
converte a cadeia de caracteress
a partir da base inteiroy
(sey
é em[2,36]
es
é válido)sum
faz o que diz na latafonte
Perl,
353433 bytesInclui +2 para
-ap
Execute com a lista de números no STDIN:
basemix.pl
:Eu estou esperando há séculos por uma chance de usar esse abuso ...
Explicação
Os números de entrada podem ter no máximo 2 dígitos. Um número
xy
na baseb
é simplesb*x+y
. Vou usar a regex/.$/
para que o primeiro dígito termine$`
e o último dígito$&
, então a contribuição para a soma é$&+$b*$`
.Abuso o fato de
for
não localizar adequadamente as variáveis regex (como por exemplomap
ewhile
fazer), para que os resultados de uma correspondência no loop anterior ainda estejam disponíveis no loop atual. Portanto, se eu for cuidadoso com a ordem em que faço as operações, a base estará disponível como"$`$&"
, exceto no primeiro ciclo em que eu preciso que a base seja 10. Portanto, eu uso"$`$& 10"
em vezO modo como o primeiro
$&
funciona também é um abuso, uma vez que é realmente alterado pelo/.$/
enquanto ele já está na pilha aguardando para ser adicionado.O abuso final é o
}{
no final o que altera o ciclo implícito-p
depara
O que significa
$_
será indefinido na impressão, mas ainda adiciona a$\
acumulação da soma. Também é um truque de golfe padrão para obter processamento pós-loopfonte
PHP,
5351 bytesRepete a entrada, convertendo cada entrada em variante de sequência. Em seguida, pega o valor inteiro usando o número anterior como base. Para o primeiro número, a base não será definida, o PHP começará com 10 (inferido do formato do número).
Execute assim (
-d
adicionado apenas para estética):Tweaks
fonte
Geléia , 7 bytes
Experimente online!
fonte
ṖḌ
porF
Java, 86 bytes
Testando e não-destruído
fonte
JavaScript ES6,
454241 bytesConventiently
parseInt(x,0) === parseInt(x,10)
.edit : salvou 1 byte graças a @ETHproductions
fonte
&&s
por|s
.const g
com apenasg
Pure bash, 38
A lista de entrada é fornecida na linha de comando.
for i;
itera automaticamente sobre os parâmetros de entrada (equivalentes afor i in $@;
).Ideone.
fonte
Java 7,
1098986 bytesJoguei 20 bytes graças a @cliffroot (dos quais 12 devido a um erro estúpido que cometi).
Ungolfed & código de teste:
Experimente aqui.
Saída:
fonte
p
? A soma pode ser calculada assim, não poder+=r.valueOf(""+a[i],a[i-1])
:?+""
vez devalueOf
e removido variáveis desnecessáriasint c(int[]a){for(Integer i=1;i<a.length;a[0]+=i.valueOf(a[i]+"",a[++i-2]));return a[0];}
10
ep
revertido. Eu percebi o erro e o consertei, mas como a parte String agora é base-10 regular, eu posso realmente remover otoString
e apenas usar+""
.. Obrigado, e também obrigado por jogar outras coisas, -20 bytes. Eu realmente preciso fazer uma resposta que você não pode golfe mais (não que eu não apreciá-lo o mais curto melhor, claro - em código-golfe que é!; P)Na verdade, 12 bytes
Experimente online!
Explicação:
fonte
CJam , 15 bytes
Experimente online!
Explicação
fonte
Haskell,
6559 bytesTeste em Ideone .
fonte
Matlab, 68 bytes
Não é uma solução muito criativa, mas aqui está:
Testes:
fonte
function s=r(x);...
JavaScript (ES6),
544840 bytesEu usei uma abordagem recursiva.
Economizou 6 bytes, graças ao Lmis!
Economizou mais 8 bytes, graças a Neil!
fonte
parseInt(a,b)
em vez deparseInt(a[0],b)
uma vezparseInt
convertidos o primeiro argumento para cordas e ignora tudo a partir do primeiro caractere inválido (ie '').a[0]?stuff():0
vez dea.length&&stuff()
f=([b,...a],c)=>b?parseInt(b,c)+f(a,b):0
slice
funçãoPerl 6 ,
5250 bytesExplicação:
fonte
Python 2, 52 bytes
Teste em Ideone .
fonte
Julia, 63 bytes
Analisa cada número (exceto o primeiro), tomando o elemento anterior como base e somas. Adiciona o primeiro elemento no final
fonte
Ruby, 52 bytes
destroçado
uso
fonte
Scala, 67 bytes
Explicação:
fonte
Mathematica, 59 bytes
Eu gostaria que os nomes das funções do Mathematica fossem mais curtos. Mas, caso contrário, estou feliz.
Por exemplo,
rendimentos
235
.{##,0}
é uma lista dos argumentos de entrada com 0 acrescentado (representando os números);{10,##}
é uma lista dos argumentos de entrada com 10 anexados (representando as bases). Esse par de listas éTranspose
d para associar cada um ao numeral à sua base eFromDigits
(yay!) Converte cada par de numeral-base em um número inteiro da base 10, cujos resultados são somadosTr
.fonte
Lisp comum, 83
Detalhes
A
loop
construção aceita construções de iteração "v then w" , em que v é uma expressão a ser avaliada na primeira vez em que a variável de iteração é calculada e w é a expressão a ser avaliada para as iterações sucessivas. As declarações são avaliadas uma após a outra, obase
primeiro é "10" e o elemento anteriorstring
da listalist
é iterado. Asum
palavra-chave calcula uma soma: o número inteiro lidostring
com a base b , onde b é o número inteiro analisado dabase
string, na base 10.#1=
e#1#
são notações para definir e usar variáveis do leitor: o primeiro afeta uma expressão s para uma variável, o outro substitui a referência pelo mesmo objeto. Isso salva alguns caracteres para nomes longos.Exemplo
fonte
Japonês
-x
, 7 bytesTente
fonte