Polinomio -> Integrazione


11

Dato un polinomio in una variabile con coefficienti razionali, genera un'espressione equivalente contenente solo 1, variabili e integrali definiti. Ad esempio, - x 2 può essere espresso come ∫ x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

È consentito qualsiasi metodo di input / output ragionevole.

Esempi:

\ 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

Il tuo punteggio sarà la lunghezza del tuo codice moltiplicata per il numero di simboli utilizzati nei casi di test. Dovresti essere in grado di segnare il tuo programma. Il punteggio più basso vince.

Casi test:

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

Giocare a golf sarà difficile, perché non posso golf solo il codice o solo l'output, e quindi non so se un cambiamento aiuterà o danneggerà il mio punteggio fino a quando non lo provo, il che fa schifo a mio avviso.

Non lasciare che il punteggio limiti la tua creazione. Sei il benvenuto a rispondere principalmente con una parte del punteggio ben ottimizzata, anche se l'altra è andata male.



@ OlivierGrégoire Lavori inversi
l4m2

Questa è una sfida interessante, resa molto peggiore dal suo sistema di punteggio. Potrei rivendicare istantaneamente un punteggio di 0 , indipendentemente dalla lunghezza del mio codice, semplicemente assegnando chr(8747)(o equivalente) a una variabile e utilizzandolo come segno, incorrendo in occorrenze zero del simbolo. Consiglio vivamente di renderlo una sfida di golf in codice vaniglia.
caird coinheringaahing

3
@cairdcoinheringaahing Indipendentemente dal tipo di output utilizzato, ad esempio 0=[1,1,1], viene comunque conteggiato come "1 ". Quindi puoi ottenere solo 0 punti sul test case 1ex
l4m2

1
Personalmente, penso che questo sarebbe meglio come una domanda di code-golf. Qualsiasi soluzione sarà impressionante, quindi non credo che sia necessario richiedere il minor numero possibile di integrazioni.
mbomb007,

Risposte:


5

Python 2 , 315 byte * 5113 = punteggio 1610595

Sto ancora lavorando a golf il punteggio. Giocare a golf sarà difficile, perché non posso golf solo il codice o solo l'output, e quindi non so se un cambiamento aiuterà o danneggerà il mio punteggio fino a quando non lo provo, il che fa schifo a mio avviso.

Nonostante il fastidio di giocare a golf, mi è piaciuto il calcolo.

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

Provalo online!

Esegui tutti i casi di test : per segnare, conta tutti [nell'output.

Il polinomio di input viene preso come un elenco di coppie di coefficienti (numeratore, denominatore) in ordine dal più basso al più alto potere di x. (0, 1)(zero) è usato per i poteri mancanti.

L'output è dato con ciascun integrale rappresentato da un elenco [f,t,a,b]per rappresentare ∫ a b f d t

Verifica

Ecco una versione leggermente meno golfata che genera sintassi Mathematica valida per l'integrazione, che può essere testata su un notebook online. Sfortunatamente, i programmi di dimensioni decenti non verranno completati in un notebook gratuito.

Vai qui , scorri fino in fondo, "Crea nuovo blocco note ", incolla (Wolfram Language Input) e valuta (Shift + Enter) (Nota che usando il tastierino numerico Enter non funziona) .

Spiegazione

Usa queste equazioni:

-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

link


@ l4m2 Ho aggiunto i collegamenti alla domanda in modo da poter rimuovere questi commenti. Grazie.
mbomb007,

Definisci Z(n)come 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

oppureZ=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 byte * 5113 integrali = punteggio 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

Provalo online!

Utilizzare principalmente queste due equazioni:

\ 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 byte * 616 integrali = 135520 punteggio

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

Provalo online!

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


Equazione-> Lattice: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

Modifica la tua risposta esistente. Non abbiamo bisogno di una risposta separata per ogni tentativo con un punteggio diverso. Inoltre, le immagini delle equazioni che hai incluso non valgono nemmeno perché non sono leggibili.
mbomb007,

1
@ mbomb007 Solitamente metto insieme una soluzione simile e separiamo quelle abbastanza diverse. Le volte precedenti ho trovato alcuni simboli non consentiti usati quando ottengo l'immagine, quindi la tengo qui per vedere più facilmente che è legale
l4m2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.