Polynom -> Integrieren


11

Geben Sie bei einem gegebenen Polynom in einer Variablen mit rationalen Koeffizienten einen äquivalenten Ausdruck aus, der nur 1Variablen und bestimmte Integrale enthält. Zum Beispiel - x 2 als ∫ ausgedrückt werden kann x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Jede vernünftige Eingabe- / Ausgabemethode ist zulässig.

Beispiele:

\ 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

Ihre Punktzahl ist die Codelänge multipliziert mit der Anzahl der in den Testfällen verwendeten Symbole. Sie sollten in der Lage sein, Ihr Programm zu bewerten. Die niedrigste Punktzahl gewinnt.

Testfälle:

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

Golfen wird schwierig, weil ich nicht nur den Code oder nur die Ausgabe spielen kann und daher nicht weiß, ob eine Änderung meine Punktzahl verbessern oder beeinträchtigen wird, bis ich es versuche, was meiner Meinung nach scheiße ist.

Lassen Sie sich nicht von der Partitur einschränken. Sie können gerne mit hauptsächlich einem Teil der Punktzahl antworten, der gut optimiert ist, auch wenn der andere schlecht abgereist ist.



@ OlivierGrégoire Inverse Arbeit
l4m2

Dies ist eine interessante Herausforderung, die durch das Punktesystem noch verschlimmert wird. Ich könnte sofort eine Punktzahl von 0 beanspruchen , unabhängig von der Länge meines Codes, indem ich einfach chr(8747)einer Variablen eine Zuweisung (oder ein Äquivalent) zuwende und diese als Vorzeichen verwende, ohne dass das Symbol vorkommt. Ich würde dringend empfehlen, dies zu einer Vanille-Code-Golf-Herausforderung zu machen.
Caird Coinheringaahing

3
@cairdcoinheringaahing Egal, ob Sie ein Ausgabeformat verwenden, z. B. 0=[1,1,1]wird es immer noch als "1 " gezählt. Somit können Sie nur 0 Punkte auf Testfall 1undx
l4m2

1
Persönlich denke ich, dass dies als Code-Golf-Frage besser wäre. Jede Lösung wird beeindruckend sein, daher glaube ich nicht, dass so wenig Integrationen wie möglich erforderlich sind.
mbomb007

Antworten:


5

Python 2 , 315 Bytes * 5113 = 1610595 Punktzahl

Ich arbeite immer noch daran, die Partitur zu spielen. Golfen wird schwierig, weil ich nicht nur den Code oder nur die Ausgabe spielen kann und daher nicht weiß, ob eine Änderung meine Punktzahl verbessern oder beeinträchtigen wird, bis ich es versuche, was meiner Meinung nach scheiße ist.

Trotz des Ärgers beim Golfen hat mir der Kalkül gefallen.

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

Probieren Sie es online aus!

Führen Sie alle Testfälle aus. Um zu punkten, zählen Sie alle [in der Ausgabe.

Das Eingabepolynom wird als Liste von (Zähler-, Nenner-) Koeffizientenpaaren in der Reihenfolge von der niedrigsten zur höchsten Potenz von genommen x. (0, 1)(Null) wird für fehlende Potenzen verwendet.

Die Ausgabe erfolgt mit jedem Integral, das durch eine Liste dargestellt wird [f,t,a,b], um ∫ a b f d t darzustellen

Nachprüfung

Hier ist eine etwas weniger Golfversion, die eine gültige Mathematica-Syntax für die Integration ausgibt, die in einem Online-Notebook getestet werden kann. Leider werden Programme mit angemessener Größe in einem kostenlosen Notizbuch nicht ausgeführt.

Gehen Sie hier , scrollen Sie nach unten, "Neues Notizbuch erstellen", fügen Sie (Wolfram Language Input) ein und werten Sie aus (Umschalt + Eingabetaste) (Beachten Sie, dass die Verwendung der Eingabetaste nicht funktioniert) .

Erläuterung

Verwendet diese Gleichungen:

-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

Links


@ l4m2 Ich habe die Links zur Frage hinzugefügt, damit wir diese Kommentare entfernen können. Vielen Dank.
mbomb007

Definieren Z(n)als 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)]?
14 m2

oderZ=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 Bytes * 5113 Integrale = 777176 Punkte

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

Probieren Sie es online aus!

Verwenden Sie hauptsächlich diese beiden Gleichungen:

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


0

JavaScript (Node.js) , 220 Bytes * 616 Integrale = 135520 Punkte

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

Probieren Sie es online aus!

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein


Gleichung-> Latex: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'));
14 m2

Bearbeiten Sie einfach Ihre vorhandene Antwort. Wir brauchen keine separate Antwort für jeden Versuch mit einer anderen Punktzahl. Außerdem sind die von Ihnen eingeschlossenen Gleichungsbilder nicht einmal wert, aufgenommen zu werden, da sie nicht lesbar sind.
mbomb007

1
@ mbomb007 Normalerweise platziere ich ähnliche Lösungen zusammen und ganz andere getrennt. Die letzten Male habe ich einige nicht erlaubte Symbole gefunden, die verwendet wurden, als ich das Bild erhielt, also behalte ich es hier, um leichter zu sehen, dass es legal ist
l4m2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.