Polinomio -> Integrar

11

Dado un polinomio en una variable con coeficientes racionales, genera una expresión equivalente que contiene solo 1variables e integrales definidas. Por ejemplo, - x 2 puede expresarse como ∫ x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Se permite cualquier método de entrada / salida razonable.

Ejemplos:

\ 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

Su puntaje será la longitud de su código multiplicado por el número de símbolos utilizados en los casos de prueba. Debería poder calificar su programa. La puntuación más baja gana.

Casos de prueba:

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

Jugar al golf va a ser difícil, porque no puedo jugar solo el código o solo el resultado, y por lo tanto no sé si un cambio me ayudará o perjudicará mi puntaje hasta que lo intente, lo que en mi opinión apesta.

No dejes que el puntaje restrinja tu creación. Le invitamos a responder con principalmente una parte de la puntuación bien optimizada, incluso si la otra se fue mal.

l4m2
fuente
relacionados . ¿Duplicar?
Olivier Grégoire
@ OlivierGrégoire Trabajo inverso
l4m2
Este es un desafío interesante, empeorado por su sistema de puntuación. Podría reclamar instantáneamente una puntuación de 0 , independientemente de la longitud de mi código, simplemente asignando chr(8747)(o equivalente) a una variable, y usándola como el signo, incurriendo en cero ocurrencias del símbolo. Recomiendo encarecidamente hacer de este un desafío de golf de código vainilla.
caird coinheringaahing
3
@cairdcoinheringaahing No importa si usa cualquier formato de salida, por ejemplo 0=[1,1,1], todavía se cuenta como "1 ". Por lo tanto, solo puede obtener 0 puntaje en el caso de prueba 1yx
l4m2
1
Personalmente, creo que esto sería mejor como una pregunta de código de golf. Cualquier solución será impresionante, así que no creo que sea necesario requerir la menor cantidad de integraciones posible.
mbomb007

Respuestas:

5

Python 2 , 315 bytes * 5113 = puntaje 1610595

Todavía estoy trabajando en jugar golf. Jugar al golf va a ser difícil, porque no puedo jugar solo el código o solo el resultado, y por lo tanto no sé si un cambio me ayudará o perjudicará mi puntaje hasta que lo intente, lo que en mi opinión apesta.

A pesar de la molestia de jugar al golf, disfruté el cálculo.

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

Pruébalo en línea!

Ejecute todos los casos de prueba : para puntuar, cuente todos [en la salida.

El polinomio de entrada se toma como una lista de pares de coeficientes (numerador, denominador) en orden de menor a mayor potencia de x. (0, 1)(cero) se usa para las potencias faltantes.

La salida se da con cada integral representada por una lista [f,t,a,b]para representar ∫ a b f d t

Verificación

Aquí hay una versión ligeramente menos desarrollada que genera una sintaxis de Mathematica válida para la integración, que puede probarse en un cuaderno en línea. Desafortunadamente, los programas de tamaño decente no se completarán en un cuaderno gratuito.

Vaya aquí , desplácese hasta la parte inferior, "Crear nuevo bloc de notas", pegue (Wolfram Language Input) y evalúe (Shift + Enter) (tenga en cuenta que el uso del teclado numérico Enter no funciona) .

Explicación

Utiliza estas ecuaciones:

-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

Enlaces

mbomb007
fuente
@ l4m2 Agregué los enlaces a la pregunta para que podamos eliminar estos comentarios. Gracias.
mbomb007
Definir Z(n)como 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
oZ=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 * integrales 5113 = puntaje 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

Pruébalo en línea!

Utiliza principalmente estas dos ecuaciones:

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

l4m2
fuente
0

JavaScript (Node.js) , 220 bytes * 616 integrales = puntaje 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

Pruébalo en línea!

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

l4m2
fuente
Ecuación-> Látex: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
Solo edite su respuesta existente. No necesitamos una respuesta separada para cada intento con una puntuación diferente. Además, las imágenes de ecuaciones que incluiste ni siquiera valen la pena porque no son legibles.
mbomb007
1
@ mbomb007 Por lo general, coloco soluciones similares juntas y otras muy diferentes separadas. Las pocas veces anteriores encontré algunos símbolos no permitidos cuando obtuve la imagen, así que la guardo aquí para ver más fácilmente que es legal
l4m2 el