Послідовність Лемера-Конта


12

Послідовність Лемера-Контета - це така послідовність, що a (n) - n -похідна f (x) = x x по відношенню до x, як оцінено при x = 1 .

Завдання

Візьміть невід'ємне ціле число як вхід і виведіть n- й член послідовності Лемера-Конта.

Це тому вам слід мінімізувати розмір файлу вашого вихідного коду.

Випробування

OEIS 5727

Ось перші порядкові терміни (скопійовані з 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

Відповіді:


11

Хаскелл , 77 75 байт, без вбудованої диференціації

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

Спробуйте в Інтернеті!

Як це працює

Ми представляємо функцію як її нескінченний перелік коефіцієнтів ряду Тейлора приблизно x = 1: f ( x ) = ∑ n = 0 f ( n ) ( x - 1) n / n ! зображено [f (1), f ′ (1), f ″ (1),…].

У &оператор примножує дві такі функції , використовуючи правило продукту. Це дозволяє рекурсивно визначити функцію s ( x ) = x x в плані самої себе, використовуючи диференціальне рівняння s (1) = 1, s ′ ( x ) = s ( x ) ⋅ (1 + ln x ), де ln x = ∑ n = 1 (−1) n - 1 ( n - 1)! ( X - 1) n / n !.


7

Математика, 19 байт

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

-18 байт від @Не дерево


9
Якщо я чогось не пропускаю, ви можете отримати це набагато коротше:, D[x^x,{x,#}]/.x->1&19 байт.
Не дерево

насправді 21 байт .. але так! набагато коротше!
J42161217

Я не думаю, що тобі потрібен -1- послідовність від OEIS починається з n = 0.
Не дерево

1
добре тоді! 19 байт це
J42161217



4

Python з SymPy , 77 75 58 57 байт

1 байт збережено завдяки @notjagan

17 байт збережено завдяки @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)не вимагає sympy.abc.
Anders Kaseorg

1
Гмммм ... де ти користуєшся n?
Zacharý

@ZacharyT дякую! випадково я перевірив пропозицію Андерса правильно з n = 10, тому він дав такий же результат :) зафіксовано зараз
Уріель

-1 байт, замінивши x**xна x^x.
notjagan


2

Python 3 , 150 байт

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

Спробуйте в Інтернеті!

Експоненціальна складність виконання. Використовується формула, наведена на сторінці OEIS.


n>=r>=0зберігає байт.
Ad Hoc Hunter Hunter

Ви також можете зберегти байт, додавши 0**nпісля sum(...).
Ad Hoc Hunter Hunter




1

Python3 + mpmath 52 байти

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

-3 байти, спасибі @Zachary T


1
Ви повинні змінити мову на python3 + mpmath, оскільки mpmath не є стандартною бібліотекою.
Ad Hoc Hunter Hunter

2
Перший рядок ви можете змінити на from mpmath import*, а другий на diff(lambda x:x**x,1,n). (просто видалення зайвих пробілів)
Zacharý

0

Пітон 3 , 288 261 байт

Диференціація без вбудованої диференціації.

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)

Спробуйте в Інтернеті!

Як це працює

Кожен з перших п'яти рядків визначає функції та їх похідні та їх результати при оцінці за 1. Їх похідні - це також функції.

  • p це сила, тобто a*x^n
  • l є логарифмом, тобто ln(x)
  • e є експоненціальним, тобто exp(x)
  • a є додаванням, тобто f(x)+g(x)
  • m це множення, тобто f(x)*g(x)

Використання: наприклад, exp(ln(x)+3x^2)буде представлено як e(l()+p(3,2)). Нехай x=e(l()+p(3,2)). Щоб знайти його похідну, зателефонуйте x(1). Щоб знайти його результат при оцінці на 1, зателефонуйте x(0).

Бонус: символічна диференціація


За допомогою execстиснення можна зберегти багато байтів . Спробуйте в Інтернеті!
Ad Hoc Hunter Hunter

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.