Urutan Lehmer-Comtet

12

Urutan Lehmer-Comtet adalah urutan sedemikian rupa sehingga a (n) adalah turunan ke- n dari f (x) = x x sehubungan dengan x sebagaimana dievaluasi pada x = 1 .

Tugas

Ambil integer non-negatif sebagai input dan output istilah ke- n dari urutan Lehmer-Comtet.

Ini adalah sehingga Anda harus meminimalkan ukuran file dari kode sumber Anda.

Uji Kasus

OEIS 5727

Berikut adalah persyaratan pasangan pertama secara berurutan (disalin dari 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
sumber

Jawaban:

11

Haskell , 77 75 byte, tidak ada builtin diferensiasi

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

Cobalah online!

Bagaimana itu bekerja

Kami merepresentasikan fungsi sebagai daftar koefisien deret Taylor yang tak terbatas tentang x = 1: f ( x ) = n = 0 f ( n ) ( x - 1) n / n ! diwakili oleh [f (1), f ′ (1), f ″ (1), ...].

The &mengalikan Operator dua fungsi tersebut dengan menggunakan aturan produk. Ini memungkinkan kita mendefinisikan fungsi secara s ( x ) = x x dalam hal menggunakan persamaan diferensial s (1) = 1, s ′ ( x ) = s ( x ) ⋅ (1 + ln x ), di mana ln x = Σ n = 1 (-1) n - 1 ( n - 1)! ( x - 1) n / n !.

Anders Kaseorg
sumber
7

Mathematica, 19 byte

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

-18 byte dari @Tidak pohon

J42161217
sumber
9
Kecuali jika saya melewatkan sesuatu, Anda bisa mendapatkan ini jauh lebih pendek D[x^x,{x,#}]/.x->1&:, 19 byte.
Bukan pohon
sebenarnya 21 byte .. tapi ya! jauh lebih pendek!
J42161217
Saya rasa Anda tidak perlu -1- urutan dari OEIS dimulai dari n = 0.
Bukan sebatang pohon
1
baiklah kalau begitu! 19 byte itu
J42161217
5

Oktaf dengan Paket Simbolik, 36 32 byte

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

Kode mendefinisikan fungsi anonim yang menghasilkan variabel simbolik dengan hasilnya.

Cobalah online!

Luis Mendo
sumber
5

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]

Cobalah online!

Tidak ada built-in untuk membedakan atau aljabar. Output mengapung.

Tidak
sumber
4

Python dengan SymPy , 77 75 58 57 byte

1 byte disimpan berkat @ notjagan

17 byte disimpan berkat @AndersKaseorg

from sympy import*
lambda n:diff('x^x','x',n).subs('x',1)
Uriel
sumber
1
lambda n:diff('x**x','x',10).subs('x',1)tidak perlu sympy.abc.
Anders Kaseorg
1
Ummm ... di mana Anda menggunakan n?
Zacharý
@ ZakaryT terima kasih! kebetulan saya menguji proposal anders dengan n = 10, jadi hasilnya sama :) diperbaiki sekarang
Uriel
-1 byte dengan mengganti x**xdengan x^x.
notjagan
2

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

Cobalah online!

Kompleksitas runtime eksponensial. Menggunakan formula yang diberikan di halaman OEIS.

Biarawati Bocor
sumber
n>=r>=0menghemat satu byte.
Ad Hoc Garf Hunter
Anda juga dapat menyimpan byte dengan menempatkan 0**nsetelah sum(...).
Ad Hoc Garf Hunter
1

Python3 + mpmath 52 byte

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

-3 byte, Terima kasih @ Zakary T

Anubhav
sumber
1
Anda harus mengubah bahasa ke python3 + mpmath, karena mpmath bukan perpustakaan standar.
Ad Hoc Garf Hunter
2
Anda dapat mengubah baris pertama Anda menjadi from mpmath import*, dan yang kedua menjadi diff(lambda x:x**x,1,n). (Hanya menghapus spasi yang tidak perlu)
Zacharý
0

Python 3 , 288 261 byte

Diferensiasi tanpa diferensiasi bawaan.

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)

Cobalah online!

Bagaimana itu bekerja

Masing-masing dari lima baris pertama menentukan fungsi dan turunannya serta hasilnya ketika dievaluasi pada 1. Turunannya juga berfungsi.

  • p adalah kekuatan yaitu a*x^n
  • l adalah logaritma yaitu ln(x)
  • e yaitu eksponensial exp(x)
  • a adalah tambahan yaitu f(x)+g(x)
  • m adalah multiplikasi yaitu f(x)*g(x)

Penggunaan: misalnya, exp(ln(x)+3x^2)akan direpresentasikan sebagai e(l()+p(3,2)). Mari x=e(l()+p(3,2)). Untuk menemukan turunannya, hubungi x(1). Untuk menemukan hasilnya ketika dievaluasi pada 1, hubungi x(0).

Bonus: diferensiasi simbolis

Biarawati Bocor
sumber
Anda dapat menyimpan banyak byte dengan menggunakan execkompresi. Cobalah online!
Ad Hoc Garf Hunter