La secuencia de Lehmer-Comtet

12

La secuencia de Lehmer-Comtet es una secuencia tal que a (n) es la n º derivada de f (x) = x x con respecto a x como evaluado en x = 1 .

Tarea

Tomar un número entero no negativo como entrada y salida de la n º término de la secuencia de Lehmer-Comtet.

Este es el por lo que debe minimizar el tamaño del archivo de su código fuente.

Casos de prueba

OEIS 5727

Aquí están los primeros dos términos en orden (copiados del 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
Ad Hoc Garf Hunter
fuente

Respuestas:

11

Haskell , 77 75 bytes, sin diferenciación integrada

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

Pruébalo en línea!

Cómo funciona

Representamos una función como su lista infinita de coeficientes de la serie Taylor sobre x = 1: f ( x ) = ∑ n = 0 f ( n ) ( x - 1) n / n ! está representado por [f (1), f ′ (1), f ″ (1),…].

El &operador multiplica dos de esas funciones utilizando la regla del producto. Esto nos permite definir recursivamente la función s ( x ) = x x en términos de sí misma usando la ecuación diferencial s (1) = 1, s ′ ( x ) = s ( x ) ⋅ (1 + ln x ), donde ln x = ∑ n = 1 (−1) n - 1 ( n - 1)! ( X - 1) n / n !.

Anders Kaseorg
fuente
7

Mathematica, 19 bytes

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

-18 bytes de @No es un árbol

J42161217
fuente
99
A menos que me falte algo, puede acortarlo mucho: D[x^x,{x,#}]/.x->1&19 bytes.
No es un árbol
en realidad 21 bytes .. pero si! mucho mas corto!
J42161217
No creo que necesite la -1- la secuencia de OEIS comienza en n = 0.
No es un árbol
1
¡OK entonces! 19 bytes es
J42161217
5

Octava con paquete simbólico, 36 32 bytes

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

El código define una función anónima que genera una variable simbólica con el resultado.

Pruébalo en línea!

Luis Mendo
fuente
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]

Pruébalo en línea!

Sin incorporaciones para diferenciar o álgebra. Salidas flotantes.

xnor
fuente
4

Python con SymPy , 77 75 58 57 bytes

1 byte guardado gracias a @notjagan

17 bytes guardados gracias a @AndersKaseorg

from sympy import*
lambda n:diff('x^x','x',n).subs('x',1)
Uriel
fuente
1
lambda n:diff('x**x','x',10).subs('x',1)no requiere sympy.abc.
Anders Kaseorg
1
Ummm ... ¿dónde lo usas n?
Zacharý
@ZacharyT gracias! casualmente probé la propuesta de anders con n = 10, por lo que dio el mismo resultado :) solucionado ahora
Uriel
-1 byte reemplazando x**xcon 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))

Pruébalo en línea!

Complejidad de tiempo de ejecución exponencial. Utiliza la fórmula dada en la página OEIS.

Monja permeable
fuente
n>=r>=0Guarda un byte.
Ad Hoc Garf Hunter
También puede guardar un byte poniendo 0**ndespués sum(...).
Ad Hoc Garf Hunter
1

Python3 + mpmath 52 bytes

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

-3 bytes, gracias @Zachary T

Anubhav
fuente
1
Debe cambiar el idioma a python3 + mpmath, ya que mpmath no es una biblioteca estándar.
Ad Hoc Garf Hunter
2
Puede cambiar su primera línea a from mpmath import*, y la segunda a diff(lambda x:x**x,1,n). (solo eliminando espacios innecesarios)
Zacharý
0

Python 3 , 288 261 bytes

Diferenciación sin diferenciación incorporada.

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)

Pruébalo en línea!

Cómo funciona

Cada una de las primeras cinco líneas define funciones y sus derivados y sus resultados cuando se evalúan en 1. Sus derivados también son funciones.

  • p es poder es decir a*x^n
  • l es logaritmo es decir ln(x)
  • e es exponencial es decir exp(x)
  • a es la suma es decir f(x)+g(x)
  • m es multiplicación es decir f(x)*g(x)

Uso: por ejemplo, exp(ln(x)+3x^2)se representaría como e(l()+p(3,2)). Dejar x=e(l()+p(3,2)). Para encontrar su derivada, llame x(1). Para encontrar su resultado cuando se evalúa en 1, llame al x(0).

Bonus: diferenciación simbólica

Monja permeable
fuente
Puede guardar muchos bytes utilizando la execcompresión. Pruébalo en línea!
Ad Hoc Garf Hunter