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


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

Haskell , 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

Mathematica, 19 байтов

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

-18 байт из @Not дерева


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.
Андерс Касеорг

1
Ммм ... где ты используешь n?
Захарий

@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сохраняет байт.
Специальный охотник за

Вы также можете сохранить байт, поставив 0**nпосле sum(...).
Ad Hoc




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

2
Вы можете изменить свою первую строку на from mpmath import*, а вторую на diff(lambda x:x**x,1,n). (просто удаляя ненужные пробелы)
Zacharý

0

Python 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.