A sequência Lehmer-Comtet

12

A sequência Lehmer-Comtet é uma sequência tal que a (n) é a n- ésima derivada de f (x) = x x em relação a x, conforme avaliado em x = 1 .

Tarefa

Tomar um número inteiro não negativo, como entrada e saída do n ésimo termo da sequência Lehmer-Comtet.

Isso é então você deve minimizar o tamanho do arquivo do seu código-fonte.

Casos de teste

OEIS 5727

Aqui estão os dois primeiros termos em ordem (copiados do OEIS)

1, 1, 2, 3, 8, 10, 54, -42, 944, -5112, 47160, -419760, 4297512, -47607144, 575023344, -7500202920, 105180931200, -1578296510400, 25238664189504, -428528786243904, 7700297625889920, -146004847062359040, 2913398154375730560, -61031188196889482880
Post Rock Garf Hunter
fonte

Respostas:

11

Haskell , 77 75 bytes, sem diferenciação embutida

x@(a:b)&y@(c:d)=a*c:zipWith(+)(b&y)(x&d)
s=1:s&(1:scanl(*)1[-1,-2..])
(s!!)

Experimente online!

Como funciona

Representamos uma função como sua lista infinita de coeficientes da série Taylor sobre x = 1: f ( x ) = ∑ n = 0 f ( n ) ( x - 1) n / n ! é representado por [f (1), f ′ (1), f ″ (1),…].

O &operador multiplica duas dessas funções usando a regra do produto. Isso permite definir recursivamente a função s ( x ) = x x em termos de si mesma, usando a equação diferencial s (1) = 1, s ′ ( x ) = s ( x ) ⋅ (1 + ln x ), onde ln x = ∑ n = 1 (−1) n - 1 ( n - 1)! ( X - 1) n / n !

Anders Kaseorg
fonte
7

Mathematica, 19 bytes

D[x^x,{x,#-1}]/.x->1&

-18 bytes de @Não é uma árvore

J42161217
fonte
9
A menos que esteja faltando alguma coisa, você pode obter isso muito mais curto: D[x^x,{x,#}]/.x->1&19 bytes.
Não é uma árvore
na verdade 21 bytes .. mas sim! muito mais curto!
J42161217 03/07
Eu não acho que você precisa da -1- a seqüência de OEIS começa em n = 0.
Não uma árvore
1
OK então! É 19 bytes
J42161217
5

Oitava com Pacote Simbólico, 36 32 bytes

syms x
@(n)subs(diff(x^x,n),x,1)

O código define uma função anônima que gera uma variável simbólica com o resultado.

Experimente online!

Luis Mendo
fonte
5

Haskell , 57 bytes

f 0=1
f n=f(n-1)-foldl(\a k->f(k-1)/(1-n/k)-a*k)0[1..n-1]

Experimente online!

Não há embutidos para diferenciação ou álgebra. As saídas flutuam.

xnor
fonte
4

Python com SymPy , 77 75 58 57 bytes

1 byte salvo graças a @notjagan

17 bytes salvos graças a @AndersKaseorg

from sympy import*
lambda n:diff('x^x','x',n).subs('x',1)
Uriel
fonte
1
lambda n:diff('x**x','x',10).subs('x',1)não requer sympy.abc.
Anders Kaseorg
1
Ummm ... onde você usa n?
Zacharý
@ZacharyT thanks! coincidentemente eu testei proposta direita anders com n = 10, por isso deu o mesmo resultado :) corrigido agora
Uriel
-1 byte substituindo x**xpor x^x.
notjagan
2

Python 3 , 150 bytes

lambda n:0**n or sum(L(n-1,r)for r in range(n))
L=lambda n,r:0<=r<=n and(0**n or n*L(n-2,r-1)+L(~-n,r-1)+(r-~-n)*L(~-n,r)if r else n<2or-~-n*L(n-1,0))

Experimente online!

Complexidade de tempo de execução exponencial. Usa a fórmula dada na página OEIS.

Freira Furada
fonte
n>=r>=0salva um byte.
Post Rock Garf Hunter
Você também pode salvar um byte colocando 0**ndepois sum(...).
Post Rock Garf Hunter
1

Python3 + mpmath 52 bytes

from mpmath import*
lambda n:diff(lambda x:x**x,1,n)

-3 bytes, Obrigado @Zachary T

Anubhav
fonte
1
Você deve alterar o idioma para python3 + mpmath, pois mpmath não é uma biblioteca padrão.
Post Rock Garf Hunter
2
Você pode alterar sua primeira linha para from mpmath import*e a segunda para diff(lambda x:x**x,1,n). (apenas remover espaços desnecessários)
Zachary
0

Python 3 , 288 261 bytes

Diferenciação sem diferenciação embutida.

p=lambda a,n:lambda v:v and p(a*n,n-1)or a
l=lambda v:v and p(1,-1)
e=lambda v:v and m(e,a(p(1,0),l))or 1
a=lambda f,g:lambda v:v and a(f(1),g(1))or f(0)+g(0)
m=lambda f,g:lambda v:v and a(m(f(1),g),m(g(1),f))or f(0)*g(0)
L=lambda n,f=e:n and L(n-1,f(1))or f(0)

Experimente online!

Como funciona

Cada uma das cinco primeiras linhas define funções e suas derivadas e seus resultados quando avaliadas em 1. Seus derivados também são funções.

  • p é poder ou seja a*x^n
  • l é logaritmo ou seja ln(x)
  • e é exponencial ou seja exp(x)
  • a é adição ou seja f(x)+g(x)
  • m é multiplicação ou seja f(x)*g(x)

Uso: por exemplo, exp(ln(x)+3x^2)seria representado como e(l()+p(3,2)). Let x=e(l()+p(3,2)). Para encontrar sua derivada, ligue x(1). Para encontrar seu resultado quando avaliado em 1, ligue x(0).

Bônus: diferenciação simbólica

Freira Furada
fonte
Você pode salvar muitos bytes usando a execcompactação. Experimente online!
Post Rock Garf Hunter