Wielomian -> Zintegruj

11

Biorąc pod uwagę wielomian w jednej zmiennej z wymiernymi współczynnikami, wyprowadzaj równoważne wyrażenie zawierające tylko 1zmienne i całki oznaczone. Na przykład, - x 2 można wyrazić jako ∫ x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Dowolna rozsądna metoda wejścia / wyjścia jest dozwolona.

Przykłady:

\ 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

Twój wynik będzie twoją długością kodu pomnożoną przez liczbę symboli użytych w przypadkach testowych. Powinieneś być w stanie ocenić swój program. Najniższy wynik wygrywa.

Przypadki testowe:

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

Gra w golfa będzie trudna, ponieważ nie mogę grać w golfa tylko kodem lub samym rezultatem, a zatem nie wiem, czy zmiana pomoże lub zrani mój wynik, dopóki go nie wypróbuję, co moim zdaniem jest do kitu.

Nie pozwól, aby wynik ograniczył twoją twórczość. Zachęcamy do odpowiedzi, w której jedna część wyniku jest dobrze zoptymalizowana, nawet jeśli druga źle się opuściła.

l4m2
źródło
powiązane . Duplikować?
Olivier Grégoire,
@ OlivierGrégoire Odwrotna praca
l4m2
To interesujące wyzwanie, znacznie pogorszone przez system punktacji. Mógłbym natychmiast uzyskać wynik 0 , bez względu na długość mojego kodu, po prostu przypisując chr(8747)(lub równoważny) zmiennej i używając tego jako znaku, powodując zerowe występowanie symbolu. Chciałbym zdecydowanie zalecamy przeprowadzenie tej kod wanilia golf wyzwaniem.
caird coinheringaahing
3
@cairdcoinheringaahing Bez względu na format wyjściowy, np 0=[1,1,1]. nadal jest liczony jako „1 ”. W ten sposób można uzyskać tylko 0 punktów w przypadku testowym 1ix
l4m2
1
Osobiście uważam, że byłoby to lepsze pytanie w golfa. Każde rozwiązanie będzie imponujące, więc nie sądzę, że trzeba wymagać jak najmniejszej integracji.
mbomb007

Odpowiedzi:

5

Python 2 , 315 bajtów * 5113 = 1610595 punktów

Nadal pracuję nad grą w golfa. Gra w golfa będzie trudna, ponieważ nie mogę grać w golfa tylko kodem lub samym rezultatem, a zatem nie wiem, czy zmiana pomoże lub zrani mój wynik, dopóki go nie wypróbuję, co moim zdaniem jest do kitu.

Pomimo irytacji gry w golfa, podobał mi się rachunek różniczkowy.

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

Wypróbuj online!

Uruchom wszystkie przypadki testowe - aby zdobyć, policz wszystkie [w danych wyjściowych.

Wielomian wejściowy jest traktowany jako lista par współczynników (licznik, mianownik) w kolejności od najniższej do najwyższej mocy x. (0, 1)(zero) jest używane dla brakujących mocy.

Dane wyjściowe są podawane z każdą całką reprezentowaną przez listę [f,t,a,b]reprezentującą ∫ a b f d t

Weryfikacja

Oto nieco mniej golfowa wersja, która wypisuje prawidłową składnię Mathematica do integracji, którą można przetestować na notebooku online. Niestety, programy o przyzwoitych rozmiarach nie zakończą się w darmowym notebooku.

Idź tutaj , przewiń w dół, „Utwórz nowy notatnik”, wklej (Wprowadzanie języka Wolfram) i oceń (Shift + Enter) (Zauważ, że użycie klawisza numerycznego Enter nie działa) .

Wyjaśnienie

Korzysta z tych równań:

-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

Spinki do mankietów

mbomb007
źródło
@ l4m2 Dodałem linki do pytania, abyśmy mogli usunąć te komentarze. Dzięki.
mbomb007
Zdefiniować Z(n)jako 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
lubZ=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 bajty * całki 5113 = wynik 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

Wypróbuj online!

Używaj głównie tych dwóch równań:

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

l4m2
źródło
0

JavaScript (Node.js) , 220 bajtów * 616 całek = 135520 punktów

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

Wypróbuj online!

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

l4m2
źródło
Równanie-> Lateks: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'));
m2 2
Po prostu edytuj swoją istniejącą odpowiedź. Nie potrzebujemy osobnej odpowiedzi dla każdej próby z innym wynikiem. Ponadto zawarte w obrazach równania nie są nawet warte uwzględnienia, ponieważ nie są czytelne.
mbomb007
1
@ mbomb007 Zwykle umieszczam podobne rozwiązanie razem i całkiem różne oddzielne. Poprzednie kilka razy znalazłem kilka niedozwolonych symboli używanych, gdy otrzymuję obraz, więc trzymam go tutaj, aby łatwiej było zobaczyć, że jest to legalne
l4m2