Lehmer-Comttsekvensen

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

Lehmer-Comtet-sekvensen är en sekvens så att a(n) är nt-derivatet av f(x) = xx med avseende på x som utvärderas vid x = 1 .

Uppgift

Ta ett icke-negativt heltal som inmatning och skriv ut den n e termen av Lehmer-Comtts-sekvensen.

Detta är så att du bör minimera filstorleken på din källkod.

Testfall

OEIS 5727

Här är de första parvillkoren i ordning (kopieras från 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 byte, ingen differentiering bygger

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

Prova det online!

Hur det fungerar

Vi representerar en funktion som sin oändliga lista över Taylors seriekoefficienter om x = 1: f ( x ) = Σ n = 0 f ( n ) ( x - 1) n / n ! representeras av [f (1), f '(1), f "(1), ...].

& Operatören multiplicerar två sådana funktioner med hjälp av produktregeln. Detta låter oss rekursivt definiera funktionen s ( x ) = x x i sig själv med hjälp av differentialekvationen s (1) = 1, s '( x ) = s ( x ) ⋅ (1 + ln x ), där 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
Om inte jag saknar något kan du få det här mycket kortare: D[x^x,NO , 19 byte.
Jenny_mathy 07/03/2017
faktiskt 21 byte .. men ja! mycket kortare!
Not a tree 07/03/2017
Jag tror inte att du behöver -1 - sekvensen från OEIS börjar vid n = 0.
1 Jenny_mathy 07/03/2017
okej då! 19 byte är det

Luis Mendo 07/02/2017.

Octave med symboliskt paket, 36 32 byte

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

Koden definierar en anonym funktion som matar ut en symbolisk variabel med resultatet.

Try it online!


Uriel 07/03/2017.

Python med 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) kräver inte sympy.abc .
Uriel 07/02/2017
@AndersKaseorg tack!
1 Zacharý 07/02/2017
Ummm ... vart använder du n ?
Uriel 07/02/2017
@ZacharyT tack! tillfälligt testade jag anders förslag med n = 10, så det gav samma resultat :) fixat nu
notjagan 07/03/2017
-1 byte genom att ersätta x**x med x^x .

xnor 07/03/2017.

Haskell , 57 byte

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

Prova det online!

Inga inbyggda insatser för differentiering eller algebra. Utgångar flyter.


Anders Kaseorg 07/03/2017.

SageMath , 33 32 bytes

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

Prova på SageMathCell


Leaky Nun 07/03/2017.

Python 3 , 150 byte

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

Prova det online!

Exponentiell körtidskomplexitet. Använder formeln som ges på OEIS-sidan.


Bhav 07/03/2017.

Python3 + mpmath 52 byte

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

-3 byte, tack @Zachary T

2 comments
1 Funky Computer Man 07/02/2017
Du bör ändra språket till python3 + mpmath, eftersom mpmath inte är ett standardbibliotek.
2 Zacharý 07/02/2017
Du kan ändra din första rad till from mpmath import* , och den andra att diff(lambda x:x**x,1,n) . (bara att ta bort onödiga utrymmen)

alephalpha 07/03/2017.

Pari / GP , 35 byte

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

Prova det online!


Leaky Nun 07/03/2017.

Python 3 , 288 261 bytes

Differentiering utan differentiering inbyggd.

 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) 

Prova det online!

Hur det fungerar

Var och en av de första fem linjerna definierar funktioner och deras derivat och deras resultat när de utvärderas vid 1 . Deras derivat är också funktioner.

  • p är effekt dvs a*x^n
  • l är logaritmen dvs ln(x)
  • e är exponentiell dvs exp(x)
  • a är addition dvs f(x)+g(x)
  • m är multiplikation dvs f(x)*g(x)

Användning: till exempel exp(ln(x)+3x^2) skulle representeras som e(l()+p(3,2)) . Låt x=e(l()+p(3,2)) . För att hitta dess derivat, ring x(1) . För att hitta resultatet när det utvärderas vid 1 , ring x(0) .

Bonus: Symbolisk differentiering

1 comments
Funky Computer Man 07/03/2017
Du kan spara mycket byte genom att använda exec komprimering. Prova det online!

Related questions

Hot questions

Language

Popular Tags