Todos sabemos que o número de Euler , indicado por e, à potência de alguma variável x, pode ser aproximado usando a expansão da série Maclaurin :
Ao deixar x igual a 1, obtemos
Desafio
Escreva um programa em qualquer idioma que se aproxime do número de Euler, inserindo uma entrada N e calculando a série para o nono termo. Observe que o primeiro termo tem denominador 0 !, não 1 !, ou seja, N = 1 corresponde a 1/0 !.
Pontuação
Programa com menos quantidade de bytes ganhos.
code-golf
math
number
approximation
Meow Mix
fonte
fonte
N
Se forem suficientemente grandes, os resultados serão os mesmos se você usar um número de ponto flutuante de precisão finita. Esse comportamento é aceitável ou o resultado precisa ficar progressivamente mais preciso à medida que seN
aproxima do infinito?Respostas:
Gelatina , 5 bytes
Experimente online!
Como funciona
fonte
Ḷ
, o que faz um intervalo de [0, n) . ^ v ^;Wistful-C - 336 bytes
Meu primeiro programa de verdade! Na verdade, eu pratiquei um pouco de golfe, usando ao
someday
invés dewait for
porque o primeiro tinha um comprimento menor.fonte
<stdio.h>
someday i were N...
vez desomeday i will be N...
?Pitão,
76 bytesExperimente aqui.
Obrigado a FryAmTheEggman por um byte!
fonte
TI-84 BASIC,
121514A TI é um idioma tokenizado (os bytes são contados por tokens , não por caracteres individuais).
fonte
Ans
não é um formato de entrada válido, portanto, apenas a versão de 15 bytes é válida.Ans
sempre foi o formato de entrada padrão aqui no PPCG (veja minhas antigas respostas de TI) e mais pessoas concordam que não concordam com isso, portanto, não se intimide em alterar sua resposta.Julia,
282721 bytesEsta é uma função anônima que aceita um número inteiro e retorna um número flutuante. Para chamá-lo, atribua-o a uma variável.
A abordagem é bastante direta. Nós
sum
1 dividido pela função gama avaliada em cada um de 1 a n . Isso tira proveito da propriedade n ! = Γ ( n +1).Experimente online!
Guardou 1 byte graças a Dennis e 6 graças a Glen O!
fonte
@(n)sum(1./factorial(0:n))
Python, 36 bytes
Python 2:
Python 3:
fonte
or
em vez deand
:f=lambda n,i=1:i>=n or 1+f(n,i+1)/i
.dc, 43 bytes
Esta é uma tradução bastante direta da série. Tentei ser mais inteligente, mas isso resultou em um código mais longo.
Explicação
Uma função fatorial simples, para n> 0
Execute o fatorial para n, ..., 1; inverter e somar
Prepare a pilha com 1; aceite a entrada e defina uma precisão apropriada
Se a entrada foi 0 ou 1, podemos apenas transmiti-la, senão calcular a soma parcial.
Imprima o resultado.
Resultado dos testes
As 100 primeiras expansões:
Usando 1000 termos:
fonte
J, 10 bytes
Abordagem direta.
Explicação
fonte
1#.%@!@i.
CJam, 11
ou
Experimente online: primeira versão e segunda versão
Explicação:
r~
= ler e avaliarm!
= fatorialW#
= elevar à potência -1 (W
= -1):+
= soma da matriz Aprimeira versão constrói a matriz [0… N-1] e aplica fatorial e inversa a todos os seus elementos; A segunda versão faz fatorial e inversa para cada número e os coloca em uma matriz.
fonte
JavaScript ES6,
44 4240Uma função sem nome agora.
Obrigado por salvar 2 bytes @AlexA e obrigado a @LeakyNun por mais 2 bytes!
fonte
n=>{for(k=s=m=1;m<n;s+=k/=m++);return s}
MATL,
117 bytes4 bytes salvos graças à recomendação de @ Luis de usar
gamma
(Yg
)Experimente Online
Explicação
fonte
]
1i:Yg/s
por 7 bytesMATL , 6 bytes
Isso calcula a soma usando a função hipergeométrica 1 F 1 ( a ; b ; z ):
Funciona no Octave e no compilador on-line, mas não no Matlab, devido a uma diferença na forma como a função hipergeométrica é definida (que será corrigida).
Experimente online!
Explicação
fonte
C, 249 bytes
Ungolfed:
Leva um número como argumento para determinar o número de iterações.
fonte
int
antesmain
e doreturn 0
. Além disso, se você substituirNULL
por0
, não precisará das inclusões.argc
eargv
pode ser reduzido para variáveis de letra única. Se você gosta de golfe em C, você pode encontrar dicas para golfe em C útil.#include <stdio.h>
k (13 bytes)
Sujeito a estouros para
N>20
fonte
05AB1E, 6 bytes
Explicado
Experimente online
fonte
L<!zO
.Pyke, 10 bytes
Experimente aqui!
Ou 8 bytes se poder = 1
Experimente aqui!
fonte
JavaScript (ES6), 28 bytes
fonte
Dyalog APL , 6 bytes
+/
soma dos÷
recíprocos dos!
fatoriais dos⍳
números de 0 a⎕
entrada numéricaSupõe
⎕IO←0
, que é padrão em muitos sistemas.TryAPL !
fonte
Haskell, 37 bytes
Não é o mais curto, mas sem dúvida o mais bonito.
Também cortesia de Laikoni , aqui está uma solução que é 2 bytes mais curta:
fonte
50
. Para adicionar um cabeçalho, use:## Language, <xxx> bytes
.f n=
ou\n->
obter um envio de função válido. No entanto, também podemos salvar alguns bytes:(\x->1/x)
pode ser reduzido para a seção(1/)
,[1,2..]
é o mesmo que[1..]
emap(...)$
pode ser(...)<$>
. Juntos 36 bytes: Experimente online!((scanl(+)0$(1/)<$>scanl(*)1[1..])!!)
parece bom também.\n->
para criar uma função.APL (Dyalog Unicode) , 5 bytes
Experimente online!
Usando o truque de base mista encontrado na minha resposta de outro desafio . Usos
⎕IO←0
.Como funciona
fonte
1÷(n-1)!
é um dígito? Você poderia traduzi-lo em J para esclarecer?Na verdade, 6 bytes
Experimente online!
Explicação:
fonte
Braquilog , 18 bytes
Explicação
fonte
Maple, 18
Uso:
fonte
C, 69 bytes
Ideone it!
fonte
Java com pólo a laser de dez pés ,
238236 bytesTem muito melhor resistência a transbordamento do que a maioria das outras respostas. Por 100 termos, o resultado é
fonte
Julia, 28 bytes
Explicação
gamma(k+1)
é igual afactorial(k)
para entradas inteiras positivas e o generaliza para todos os valores, exceto os inteiros não negativos. Ele economiza um byte, então por que não usá-lo?fonte
MATLAB / oitava, 22 bytes
Cria uma função anônima chamada
ans
que pode ser chamada usandoans(N)
.Esta solução calcula
gamma(x)
para cada elemento na matriz [1 ... N] que é igual afactorial(x-1)
. Em seguida, tomamos o inverso de cada elemento e somamos todos os elementos.Demo Online
fonte
Perl 5, 37 bytes
Não é um vencedor, mas agradável e direto:
Saídas para entradas de 0 a 10:
fonte
R, 17 bytes
Muito simples, embora problemas de precisão numérica devam surgir em algum momento.
fonte
WolframAlpha , 12 bytes
fonte