(Isso pode ser bastante clássico, mas este é o meu primeiro post aqui, então ainda não estou pronto para as coisas chiques)
A sequência Goodstein é definida para um número de entrada da seguinte maneira:
Escolha um número inicial n , deixe b = 2 e repita:
- escreva n na notação b da base heriditária
- substitua todos os ( b ) sa ( b +1) s no ne substrato 1
- produz a nova avaliação decimal de n
- incremento b
A notação de base hereditária é uma decomposição de um número em que a base é o número maior a aparecer. Exemplos:
83
no HB3:3^(3+1)+2
226
no HB2:2^(2^(2+1))+2^(2+1)+2
As seqüências de Goodstein sempre terminam em 0 , mas tendem a ficar grandes muito rapidamente, portanto, não é solicitado que você produza a sequência completa.
Tarefa:
Dado um número de entrada em qualquer formato razoável, seu trabalho é produzir a sequência Goodstein para esse número pelo menos até atingir 10 ^ 25 ou 0
Exemplos:
Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990
Detalhes:
- O número de entrada pode ser uma matriz, uma sequência, um número inteiro, desde que esteja na base decimal
- A saída segue a mesma regra
- A separação dos termos na saída pode ser espaços, novas linhas ou qualquer separação razoável
- Assim que a sequência for maior que 10 ^ 25, seu programa poderá sair normalmente, gerar um erro / exceção ou continuar (sem restrição)
- Isso é código-golfe , então a resposta mais curta (em bytes) vence
- Obviamente, são proibidas brechas comuns
- Exemplo de trabalho ungolfed Python aqui
int(q/base.b), q%base.b
precisa serq//base.b, q%base.b
(ou simplesmentedivmod(q, base.b)
) para evitar erros de ponto flutuante.Respostas:
Pitão ,
2826 bytesA nova linha à direita é significativa.
Experimente online! (Este link inclui um extra
Q
não necessário na versão atual do Pyth.)Como funciona
É importante que
y
seja redefinido em cada iteração de loop para impedir a memorização através de alterações na variável globalJ
.fonte
Haskell , 77 bytes
(&2)
é uma função anônima que recebeInteger
e retorna uma (potencialmente muito longa) lista deInteger
s, use como(&2) 13
.Experimente online! (corta às
10^25
.)Como funciona
(&2)
inicia a sequência com base2
.n&b
calcula a subsequência começando com o númeron
e a baseb
.n<0
, o que geralmente acontece na etapa seguinten==0
.n
à lista retornada recursivamente pela expressão(0?n-1)&(b+1)
.?
é um operador de função local.0?n
fornece o resultado da conversãon
em base hereditáriab
e depois do incremento da base em todos os lugares.e
acompanhando o expoente atual.e?n
converte o númeron*b^e
.0
quandon==0
.n
pela baseb
.(e+1)?div n b
lida com a recursão para o quociente e o próximo expoente mais alto.mod n b*(b+1)^0?e
manipula o restante (que é o dígito correspondente ao expoente atuale
), o incremento da base e a conversão do expoente atual hereditariamente com0?e
.fonte