A sequência de Sylvester, OEIS A000058 , é uma sequência inteira definida da seguinte maneira:
Cada membro é o produto de todos os membros anteriores mais um. O primeiro membro da sequência é 2.
Tarefa
Crie o menor programa possível que tome n e calcule o enésimo termo da Sequência de Sylvester. Entrada, saída e brechas padrão se aplicam. Como o resultado cresce muito rapidamente, não é esperado que você tome nenhum termo cujo resultado possa causar um estouro no idioma escolhido.
Casos de teste
Você pode usar zero ou uma indexação. (Aqui eu uso zero indexação)
>>0
2
>>1
3
>>2
7
>>3
43
>>4
1807
n
retorna onth
número da sequência aceito?Respostas:
Brain-Flak ,
7668585246 bytesExperimente online!
Usa esse relacionamento:
que é derivado desse relacionamento modificado daquele fornecido na sequência:
a(n+1) = a(n) * (a(n) - 1) + 1
.Explicação
Para uma documentação do que cada comando faz, visite a página do GitHub .
Existem duas pilhas no Brain-Flak, que vou chamar de pilha 1 e pilha 2, respectivamente.
A entrada é armazenada na Pilha 1.
Para o algoritmo de geração:
Versão alternativa de 46 bytes
Isso usa apenas uma pilha.
Experimente online!
fonte
Gelatina , 5 bytes
Isso usa indexação baseada em 0 e a definição da especificação de desafio.
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Hexagonia , 27 bytes
Desdobrado:
Experimente online!
Explicação
Vamos considerar a sequência
b(a) = a(n) - 1
e reorganizar um pouco:Essa sequência é muito semelhante, mas podemos adiar o incremento até o fim, o que acontece para salvar um byte neste programa.
Então, aqui está o código fonte anotado:
Criado com o HexagonyColorer de Timwi .
E aqui está um diagrama de memória (o triângulo vermelho mostra a posição e orientação inicial do ponteiro de memória):
Criado com o EsotericIDE de Timwi .
O código começa no caminho cinza que envolve o canto esquerdo; portanto, o bit linear inicial é o seguinte:
Em seguida, o código atinge o
<
que é uma ramificação e indica o início (e o fim) do loop principal. Enquanto a borda N tiver um valor positivo, o caminho verde será executado. Esse caminho envolve a grade algumas vezes, mas na verdade é inteiramente linear:O
.
são no-ops, então o código real é:Depois que esse decrementar se reduz
N
a0
, o caminho vermelho é executado:fonte
J,
181412 bytesEsta versão graças ao randomra. Vou tentar escrever uma explicação detalhada mais tarde.
J, 14 bytes
Esta versão graças a milhas. Utilizou o advérbio de poder em
^:
vez de uma agenda como abaixo. Mais explicações por vir.J, 18 bytes
Indexado a 0.
Exemplos
Explicação
Esta é uma agenda que se parece com isso:
(Gerado usando
(9!:7)'┌┬┐├┼┤└┴┘│─'
então5!:4<'e'
)Decomposição:
Usando a ramificação superior como gerúndio
G
e a parte inferior como seletorF
, é o seguinte:Isso usa a função constante
2:
quando0 = * n
, ou seja, quando o sinal é zero (portanto,n
é zero). Caso contrário, usamos este fork:Qual é mais uma das seguintes séries:
Decompondo ainda mais, trata-se de produto (
*/
) acima da auto-referência ($:
) acima do intervalo (i.
).fonte
2(]*:-<:)^:[~]
14 bytes usando a fórmulaa(0) = 2
ea(n+1) = a(n)^2 - (a(n) - 1)
. Para calcular valores maiores, o valor2
inicial deve ser marcado como um número inteiro estendido.v`$:@.u
formato recursivo. Eu sempre usei um^:v
formato que geralmente é mais complexo. @miles Eu também nunca usei o(]v)
truque. Levei uns bons 5 minutos para entender.2(]*:-<:)~&0~]
(ou2:0&(]*:-<:)~]
). E combinando-os 13 bytes]0&(]*:-<:)2:
.0&(]*:-<:)2:
. (Desculpe, eu não deveria golfe nos comentários.)Perl 6 , 24 bytes
Explicação
Uso:
fonte
$_
? Que bruxaria é essa?Haskell, 26 bytes
Exemplo de uso:
f 4
->1807
.fonte
Java 7,
46bytesUsa a indexação 0 com a fórmula usual. Eu troquei
n*n-n
por isson*(n-1)
, já que o Java não tem um operador de energia útil, e asf()
chamadas estavam ficando longas.fonte
f(n)*~-f(n)
Deveria trabalhar.return--n<0
salva mais um byte.Haskell, 25 bytes
fonte
SILOS , 60 bytes
Experimente online!
Porto de minha resposta em C .
fonte
Brain-Flak ,
158154 bytesFreira com vazamento me fez bater aqui
Experimente Online!
Explicação
Coloque dois na entrada a (0)
Enquanto a entrada for maior que zero, subtraia uma da entrada e ...
Silenciosamente ...
Coloque um na outra pilha para atuar como um catalisador da multiplicação <> (()) <>
Enquanto a pilha não estiver vazia
Mova o topo da lista e copie
Multiplique o catalisador pela cópia
Adicione um
Mova a sequência de volta para a pilha apropriada
Remova tudo, exceto o item inferior (ou seja, o último número criado)
fonte
C, 32 bytes
Usa indexação baseada em 1. Teste em Ideone .
fonte
Na verdade , 9 bytes
Experimente online!
Usa esse relacionamento:
que é derivado desse relacionamento modificado daquele fornecido na sequência:
a(n+1) = a(n) * (a(n) - 1) + 1
.fonte
R,
44 4241 bytesEconomize 2 bytes graças ao JDL
Economize 1 byte graças ao usuário5957401
fonte
n
seja garantido que não seja negativo, a condição poderá ser reduzida den>0
para apenasn
.f(n-1)
é de 6 bytes. Eu acho que você salva um byte atribuindo-o a algo. ieifelse(n,(a=f(n-1))^2-a+1,2)
Oásis , 4 bytes (não competitivo)
Provavelmente minha última língua da família do golfe! Não concorrente, uma vez que o idioma adia o desafio.
Código:
Solução alternativa graças ao Zwei :
Versão expandida:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
b<*>2
usar o #a(n-1)*(a(n-1)+1)-1
b
que será automaticamente preenchido (em vez da entrada) :).Python,
3836 bytes2 bytes graças a Dennis.
Ideone it!
Usa esse relacionamento modificado em relação ao fornecido na sequência:
a(n+1) = a(n) * (a(n) - 1) + 1
Explicação
0**n*2
retorna2
quandon=0
e de0
outra forma, porque0**0
está definido para estar1
em Python.fonte
Cheddar , 26 bytes
Experimente online!
Bastante idiomático.
Explicação
fonte
CJam, 10 bytes
Usa indexação baseada em 0. Experimente online!
fonte
05AB1E , 7 bytes
Explicado
Usa indexação baseada em zero.
Experimente online!
fonte
Prolog, 49 bytes
fonte
SILOS 201 bytes
Sinta-se livre para experimentá-lo online!
fonte
Geléia , 7 bytes
Experimente online!
Usa esse relacionamento fornecido na sequência:
a(n+1) = a(n)^2 - a(n) + 1
Explicação
fonte
C, 46 bytes
Ideone it!
Utiliza
p
como armazenamento temporário do produto.Basicamente, eu defini duas seqüências
p(n)
er(n)
, onder(n)=p(n-1)+1
ep(n)=p(n-1)*r(n)
.r(n)
é a sequência necessária.fonte
R,
50 4644 bytesEm vez de rastrear toda a sequência, mantemos o controle do produto, que segue a regra de atualização quadrática fornecida, desde que
n> 1n> 0. (Esta sequência usa a convenção "iniciar emumzero")O uso da convenção start at zero economiza alguns bytes, pois podemos usar if (n) em vez de se (n> 1)
fonte
Água-viva , 13 bytes
Experimente online!
Explicação
Vamos começar de baixo para cima:
Este é um gancho, que define uma função
f(x) = (x-1)*x
.Isso compõe o gancho anterior com a função de incremento, portanto, fornece uma função
g(x) = (x-1)*x+1
.Finalmente, isso gera uma função
h
que é uma iteração da função anteriorg
, quantas vezes for fornecida pela entrada inteira.E, finalmente, aplicamos essa iteração ao valor inicial
2
. Ap
parte superior apenas imprime o resultado.Alternativa (também 13 bytes)
Isso adia o incremento até o final.
fonte
C,
43,34, 33 bytes1 indexado:
Teste principal:
fonte
Braquilog , 13 bytes
Experimente online!
Usa esse relacionamento:
que é derivado desse relacionamento modificado daquele fornecido na sequência:
a(n+1) = a(n) * (a(n) - 1) + 1
.fonte
Mathematica, 19 bytes
Ou 21 bytes:
fonte
Array
solução é mágica. Que pena,##0
não é uma coisa. ;)Labirinto , 18 bytes
Créditos ao Sp3000 que encontraram a mesma solução de forma independente.
Experimente online!
fonte
Na verdade ,
1412 bytesIsso usou a indexação 0. Sugestões de golfe são bem-vindas. Experimente online!
Ungolfing:
fonte
GolfScript ,
1210 bytes2 bytes graças a Dennis.
Experimente online!
Usos
a(n) = a(n-1) * (a(n-1)-1) + 1
.fonte
(
é a abreviação de1-
;)
é a abreviação de1+
.