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

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 !.


7

Mathematica, 19 byte

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

-18 byte dari @Tidak pohon


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!


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.


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)

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.


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


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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.