Полином -> Интегрировать

11

Если дан многочлен от одной переменной с рациональными коэффициентами, выведите эквивалентное выражение, содержащее только 1переменные и определенные интегралы. Например, - x 2 может быть выражено как ∫ x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Разрешен любой разумный метод ввода / вывода.

Примеры:

\ Large 1 = 1 \ \ Large x = x \ \ Large 0 = \ int_1 ^ 1 1 \ text dt \ \ Large 2 = \ int _ {\ int_1 ^ {\ int_1 ^ 1 1 \ text dv} 1 \ text du} ^ 1 1 \ text dt \ \ Large x ^ 2 = \ int _ {\ int_1 ^ 1 1 \ text dt} ^ xx \ text dv \ \ Large \ frac 12 = \ int _ {\ int_1 ^ 1 1 \ text dt} ^ 1 v \ text dv

Ваша оценка будет равна длине вашего кода, умноженной на количество символов, используемых в тестовых примерах. Вы должны быть в состоянии оценить свою программу. Самый низкий балл побеждает.

Тестовые случаи:

4/381*x^2+49/8*x^3-17/6
311/59*x^2-92/9*x^3-7/15*x
333/29*x^3+475/96*x^8

Гольф будет трудным, потому что я не могу сыграть в гольф только код или только вывод, и поэтому я не знаю, поможет ли изменение или повредит моему счету, пока я не попробую, что, на мой взгляд, отстой.

Не позволяйте счету ограничивать ваше творение. Вы можете ответить, в основном, с одной частью хорошо оптимизированной оценки, даже если с другой плохо ушли.

l4m2
источник
связанные . Дублирование?
Оливье Грегуар
@ OlivierGrégoire Обратная работа
l4m2
Это интересная задача, которая усугубляется системой начисления очков. Я мог бы мгновенно получить оценку 0 , независимо от длины моего кода, просто назначив chr(8747)(или эквивалентную) переменной и используя ее в качестве знака, что приведет к нулевому вхождению символа. Я настоятельно рекомендую сделать это ванильным кодом для игры в гольф.
Caird Coinheringaahing
3
@cairdcoinheringaahing Независимо от того, используете ли вы какой-либо формат вывода, например 0=[1,1,1], он по-прежнему считается «1 ». Таким образом, вы можете получить только 0 баллов за тестовый случай 1иx
l4m2
1
Лично я думаю, что это было бы лучше, как вопрос игры в гольф. Любое решение будет впечатляющим, поэтому я не думаю, что нужно требовать как можно меньше интеграций.
mbomb007

Ответы:

5

Python 2 , 315 байт * 5113 = 1610595 баллов

Я все еще работаю над игрой в гольф. Гольф будет трудным, потому что я не могу сыграть в гольф только код или только вывод, и поэтому я не знаю, поможет ли изменение или повредит моему счету, пока я не попробую, что, на мой взгляд, отстой.

Несмотря на раздражение от игры в гольф, я получил удовольствие от исчисления.

t='t'
Z=lambda n:N(Z(-n))if n<0else[1,t,N(1),Z(n-1)]if n>1else[[1,t,1,1],1][n]
N=lambda a:[1,t,a,Z(0)]
x=lambda n:n>1and[x(n-1),t,Z(0),'x']or'x'
M=lambda a,b:[b,t,Z(0),a]
print reduce(lambda a,b:[1,t,N(a),b],[M((lambda a,b:M(Z(a),[x(b-1)if b>1else 1,'x',Z(0),1]))(*c),x(i)if i else 1)for i,c in enumerate(input())])

Попробуйте онлайн!

Запустить все тестовые случаи - забить, подсчитать все [в выводе.

Входной многочлен берется в виде списка пар коэффициентов (числитель, знаменатель) в порядке от самой низкой до самой высокой степени x. (0, 1)(ноль) используется для пропущенных сил.

Выходные данные даются с каждым интегралом, представленным списком, [f,t,a,b]представляющим a b f d t

верификация

Вот немного менее удобная версия, которая выводит действительный синтаксис Mathematica для интеграции, который может быть протестирован в онлайн-ноутбуке. К сожалению, программы приличного размера не будут завершены в бесплатной записной книжке.

Перейдите сюда , прокрутите вниз, «Создать новую записную книжку», вставьте (ввод на языке Wolfram) и оцените (Shift + Enter) (обратите внимание, что использование ввода с помощью num-pad не работает) .

объяснение

Использует эти уравнения:

-a = \ int_a ^ {0} 1 ~ dt

n = \ int _ {- 1} ^ {n-1} 1 ~ dt, n> 1

x ^ n = \ int_0 ^ {x} x ^ {n-1} ~ dt

a + b = \ int _ {- a} ^ b 1 ~ dt

ab = \ int_0 ^ ab ~ dt

\ frac {1} {n} = \ int_0 ^ {1} x ^ {n-1} ~ dx

связи

mbomb007
источник
@ l4m2 Я добавил ссылки на вопрос, чтобы мы могли удалить эти комментарии. Спасибо.
mbomb007
Определить Z(n)как def Z(n):return N(Z(-n)) if n<0 else[1,t,1,1] if n<1 else 1 if n<2 else[1,t,N(1),Z(n-1)]?
l4m2
илиZ=lambda n:N(Z(-n))if n<0else[1,t,N(1),Z(n-1)]if n>1else[[1,t,1,1],1][n]
l4m2
1

JavaScript (Node.js) , 152 байта * 5113 интегралов = 777176 баллов

T='t';P=n=>--n?[T,'u',O,P(n)]:1;N=n=>n-1?n>-1?[1,T,N(1-n),1]:[1,T,N(-n),O]:1;O=N(0)
F=([e,...s])=>e?[1,T,[F(s),T,'x',O],[N(e[0]),T,O,[P(e[1]),T,O,1]]]:O

Попробуйте онлайн!

В основном используйте эти два уравнения:

\ ax + b: = \ int _ {\ int_a ^ 0x \ text dt} ^ b1 \ text dt \\ frac 1a = \ int_0 ^ 1u ^ {a-1} \ text du

l4m2
источник
0

JavaScript (Node.js) , 220 байт * 616 интегралов = 135520 баллов

O=[1,T='t',1,1]
D=(q,t)=>[t,'c',[q,T,1,O],q]
N=n=>n>0?[N(-n),T,1,O]:n?[D(1,1),'c',n&1?[T,T,O,1]:O,N(n/2|0)]:O
P=n=>n?[D(n%2?'x':1,T),T,O,P(n>>1)]:1
F=([e,...s])=>e?[1,T,[F(s),T,'x',O],[N(e[0]),T,O,[P(e[1]-1),'x',O,1]]]:O

Попробуйте онлайн!

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

l4m2
источник
Уравнение-> Латекс:function unpack(x) { return x instanceof Array ? `\\int_{${unpack(x[2])}}^{${unpack(x[3])}}${unpack(x[0])}\\text d${unpack(x[1])}` : x }; console.log (unpack(F([[0, 1], [-7, 15], [311, 59], [-92, 9]])).replace(/\{(.)\}/g,'$1'));
l4m2
Просто отредактируйте свой существующий ответ. Нам не нужен отдельный ответ для каждой попытки с другим счетом. Кроме того, изображения уравнений, которые вы включили, даже не стоит включать, потому что они не читаются.
mbomb007
1
@ mbomb007 Обычно я размещаю похожее решение вместе, а разные - отдельно. Несколько предыдущих раз я обнаруживал некоторые недопустимые символы, используемые при получении изображения, поэтому я держу его здесь, чтобы было легче увидеть, что оно разрешено
l4m2