Die Lehmer-Comtet-Sequenz

12

Die Lehmer-Comtet-Folge ist eine Folge, bei der a (n) die n- te Ableitung von f (x) = x x in Bezug auf x ist, wie bei x = 1 ausgewertet .

Aufgabe

Nehmen Sie eine nicht negative ganze Zahl als Eingabe und geben Sie den n- ten Term der Lehmer-Comtet-Folge aus.

Dies ist daher sollten Sie die Dateigröße Ihres Quellcodes minimieren.

Testfälle

OEIS 5727

Hier sind die ersten paar Begriffe in der Reihenfolge (aus dem OEIS kopiert)

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
quelle

Antworten:

10

Haskell , 77 75 Bytes, keine Differenzierung eingebaut

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

Probieren Sie es online!

Wie es funktioniert

Wir repräsentieren eine Funktion als ihre unendliche Liste von Taylorreihenkoeffizienten um x = 1: f ( x ) = ∑ n = 0 f ( n ) ( x - 1) n / n ! wird dargestellt durch [f (1), f '(1), f "(1), ...].

Der &Operator multipliziert zwei solcher Funktionen mit der Produktregel. Dies lässt uns rekursiv die Funktion s ( x ) = x x als solche definieren, indem wir die Differentialgleichung s (1) = 1, s '( x ) = s ( x ) ⋅ (1 + ln x ) verwenden, wobei ln x = ∑ n = 1 (−1) n - 1 ( n - 1)! ( X - 1) n / n !

Anders Kaseorg
quelle
7

Mathematica, 19 Bytes

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

-18 Bytes von @Not a tree

J42161217
quelle
9
Wenn ich nichts vermisse, kann man das viel kürzer machen: D[x^x,{x,#}]/.x->1&19 Bytes.
Kein Baum
eigentlich 21 bytes .. aber ja! viel kürzer!
J42161217
Ich glaube nicht, dass Sie das brauchen. Die -1Sequenz von OEIS beginnt bei n = 0.
Kein Baum
1
OK dann! 19 Bytes ist es
J42161217
5

Oktave mit Symbolpaket, 36 32 Bytes

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

Der Code definiert eine anonyme Funktion, die mit dem Ergebnis eine symbolische Variable ausgibt.

Probieren Sie es online!

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

Probieren Sie es online!

Keine eingebauten Funktionen zur Differenzierung oder Algebra. Ausgänge schweben.

xnor
quelle
4

Python mit SymPy , 77 75 58 57 Bytes

1 Byte gespeichert dank @notjagan

17 Bytes dank @AndersKaseorg gespeichert

from sympy import*
lambda n:diff('x^x','x',n).subs('x',1)
Uriel
quelle
1
lambda n:diff('x**x','x',10).subs('x',1)benötigt nicht sympy.abc.
Anders Kaseorg
1
Ähm ... wo benutzt du das n?
Zacharý
@ ZacharyT danke! zufällig getestet I Vorschlag richtig anders mit n = 10, so dass es das gleiche Ergebnis gab :) nun behoben
Uriel
-1 Byte durch Ersetzen x**xdurch 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))

Probieren Sie es online!

Exponentielle Laufzeitkomplexität. Verwendet die auf der OEIS-Seite angegebene Formel.

Undichte Nonne
quelle
n>=r>=0Speichert ein Byte.
Post Rock Garf Hunter
Sie können ein Byte auch speichern, indem Sie 0**nnach setzen sum(...).
Post Rock Garf Hunter
1

Python3 + mpmath 52 Bytes

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

-3 Bytes, Danke @Zachary T

Anubhav
quelle
1
Sie sollten die Sprache in python3 + mpmath ändern, da mpmath keine Standardbibliothek ist.
Post Rock Garf Hunter
2
Sie können die erste Zeile in from mpmath import*und die zweite in ändern diff(lambda x:x**x,1,n). (nur unnötige Leerzeichen entfernen)
Zacharý
0

Python 3 , 288 261 Bytes

Differenzierung ohne Differenzierung eingebaut.

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)

Probieren Sie es online!

Wie es funktioniert

Jede der ersten fünf Zeilen definiert Funktionen und deren Ableitungen sowie deren Ergebnisse, wenn sie unter ausgewertet werden 1. Ihre Ableitungen sind auch Funktionen.

  • p ist Macht dh a*x^n
  • l ist Logarithmus dh ln(x)
  • e ist exponentiell dh exp(x)
  • a ist zusätzlich dh f(x)+g(x)
  • m ist die Multiplikation dh f(x)*g(x)

Verwendung: Wird beispielsweise exp(ln(x)+3x^2)dargestellt als e(l()+p(3,2)). Lassen x=e(l()+p(3,2)). Um die Ableitung zu finden, rufen Sie an x(1). 1Rufen Sie an , um das Ergebnis bei Auswertung von zu finden x(0).

Bonus: symbolische Differenzierung

Undichte Nonne
quelle
Mit der execKomprimierung können Sie viele Bytes sparen . Probieren Sie es online!
Post Rock Garf Hunter