De sequentie van Lehmer-Comtet

Funky Computer Man 09/14/2017. 10 answers, 1.093 views
code-golf sequence integer calculus

De Lehmer-Comtet-sequentie is een sequentie die zodanig is dat a(n) de ne-afgeleide is van f(x) = xx ten opzichte van x zoals geëvalueerd op x = 1 .

Taak

Neem een ​​niet-negatief geheel getal als invoer en voer de n de term uit van de Lehmer-Comtet-reeks.

Dit is dus u moet de bestandsgrootte van uw broncode minimaliseren.

Testgevallen

OEIS 5727

Hier zijn de eerste paar termen op volgorde (gekopieerd van de 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 

10 Answers


Anders Kaseorg 07/03/2017.

Haskell , 77 75 bytes, geen differentiatie ingebouwd

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

Probeer het online!

Hoe het werkt

We vertegenwoordigen een functie als de oneindige lijst van Taylor-reekscoëfficiënten over x = 1: f ( x ) = Σ n = 0 f ( n ) ( x - 1) n / n ! wordt weergegeven door [f (1), f '(1), f "(1), ...].

De operator & vermenigvuldigt twee van dergelijke functies met behulp van de productregel. Dit laat ons recursief de functie s ( x ) = x x definiëren in termen van zichzelf met behulp van de differentiaalvergelijking s (1) = 1, s '( x ) = s ( x ) ⋅ (1 + lnx), waarbij ln x = Σ n = 1 (-1) n - 1 ( n - 1)! ( x - 1) n / n !.


Jenny_mathy 07/03/2017.

Mathematica, 19 bytes

D[x^x,NO 

-18 bytes from @Not a tree

4 comments
9 Not a tree 07/03/2017
Tenzij ik iets mis, kunt u dit een stuk korter krijgen: D[x^x,NO , 19 bytes.
Jenny_mathy 07/03/2017
eigenlijk 21 bytes .. maar ja! een stuk korter!
Not a tree 07/03/2017
Ik denk niet dat je de -1 nodig hebt - de reeks van OEIS begint bij n = 0.
1 Jenny_mathy 07/03/2017
oke dan! 19 bytes is het

Luis Mendo 07/02/2017.

Octaaf met symbolisch pakket, 36 32 bytes

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

De code definieert een anonieme functie die een symbolische variabele afgeeft met het resultaat.

Try it online!


Uriel 07/03/2017.

Python met SymPy , 77 75 58 57 bytes

1 byte saved thanks to @notjagan

17 bytes saved thanks to @AndersKaseorg

 from sympy import*
lambda n:diff('x^x','x',n).subs('x',1) 
5 comments
1 Anders Kaseorg 07/02/2017
lambda n:diff('x**x','x',10).subs('x',1) heeft sympy.abc niet nodig.
Uriel 07/02/2017
@AndersKaseorg bedankt!
1 Zacharý 07/02/2017
Ummm ... waar gebruik je n ?
Uriel 07/02/2017
@ZacharyT bedankt! toevallig testte ik Anders 'voorstel goed met n = 10, dus het gaf hetzelfde resultaat :) nu opgelost
notjagan 07/03/2017
-1 byte door x**x vervangen door x^x .

xnor 07/03/2017.

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] 

Probeer het online!

Geen inbouwmogelijkheden voor differentiatie of algebra. Uitgang drijft.


Anders Kaseorg 07/03/2017.

SageMath , 33 32 bytes

 lambda n:diff(x^x,x,n).subs(x=1) 

Probeer het op SageMathCell


Leaky Nun 07/03/2017.

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)) 

Probeer het online!

Exponentiële runtime-complexiteit. Gebruikt de formule op de OEIS-pagina.


Bhav 07/03/2017.

Python3 + mpmath 52 bytes

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

-3 bytes, Bedankt @ Zachary T

2 comments
1 Funky Computer Man 07/02/2017
U moet de taal wijzigen in python3 + mpmath, omdat mpmath geen standaardbibliotheek is.
2 Zacharý 07/02/2017
U kunt uw eerste regel wijzigen from mpmath import* , en de tweede regel naar diff(lambda x:x**x,1,n) . (alleen onnodige spaties verwijderen)

alephalpha 07/03/2017.

Pari / GP , 35 bytes

n->n!*Pol((1+x+O(x*x^n))^(1+x))\x^n 

Probeer het online!


Leaky Nun 07/03/2017.

Python 3 , 288 261 bytes

Differentiatie zonder differentiatie ingebouwd.

 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) 

Probeer het online!

Hoe het werkt

Elk van de eerste vijf regels definieert functies en hun afgeleide producten en hun resultaten wanneer ze worden geëvalueerd op 1 . Hun derivaten zijn ook functies.

  • p is macht dwz a*x^n
  • l is logaritme, dwz ln(x)
  • e is exponentieel dwz exp(x)
  • a is toevoeging ie f(x)+g(x)
  • m is vermenigvuldiging, dwz f(x)*g(x)

Gebruik: exp(ln(x)+3x^2) zou bijvoorbeeld worden weergegeven als e(l()+p(3,2)) . Laat x=e(l()+p(3,2)) . Om de afgeleide te vinden, belt u x(1) . Om het resultaat te vinden wanneer dit op 1 wordt geëvalueerd, belt u x(0) .

Bonus: symbolische differentiatie

1 comments
Funky Computer Man 07/03/2017
U kunt veel bytes besparen door exec compressie te gebruiken. Probeer het online!

Related questions

Hot questions

Language

Popular Tags