Polinômio -> Integrar


11

Dado um polinômio em uma variável com coeficientes racionais, produz uma expressão equivalente contendo apenas 1variáveis ​​e integrais definidas. Por exemplo, - x 2 pode ser expresso como ∫ x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Qualquer método razoável de entrada / saída é permitido.

Exemplos:

\ 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 \ texto dv

Sua pontuação será o tamanho do seu código multiplicado pelo número de símbolos usados ​​nos casos de teste. Você deve poder pontuar seu programa. Menor pontuação ganha.

Casos de teste:

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

O golfe será difícil, porque não posso jogar apenas o código ou apenas a saída, e, portanto, não sei se uma alteração ajudará ou prejudicará minha pontuação até que eu a experimente, o que é péssimo na minha opinião.

Não deixe a pontuação restringir sua criação. Você é convidado a responder principalmente com uma parte da pontuação bem otimizada, mesmo que a outra tenha saído muito mal.



@ OlivierGrégoire Trabalho inverso
l4m2

Este é um desafio interessante, agravado pelo seu sistema de pontuação. Eu poderia instantaneamente reivindicar uma pontuação 0 , independentemente do tamanho do meu código, simplesmente atribuindo chr(8747)(ou equivalente) a uma variável e usando-a como sinal, incorrendo em zero ocorrências do símbolo. Eu recomendo fortemente fazer deste um desafio de golfe com código de baunilha.
caird coinheringaahing

3
@cairdcoinheringaahing Não importa se você usa qualquer formato de saída, por exemplo 0=[1,1,1], ele ainda é contado como "1 ". Assim, você só pode obter 0 pontuação no caso de teste 1ex
l4m2

1
Pessoalmente, acho que isso seria melhor como uma questão de código-golfe. Qualquer solução será impressionante, por isso não acho necessário exigir o mínimo de integrações possível.
mbomb007

Respostas:


5

Python 2 , 315 bytes * 5113 = 1610595 pontuação

Ainda estou trabalhando no placar. O golfe será difícil, porque não posso jogar apenas o código ou apenas a saída, e, portanto, não sei se uma alteração ajudará ou prejudicará minha pontuação até que eu a experimente, o que é péssimo na minha opinião.

Apesar do aborrecimento de jogar isso, eu gostei do 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())])

Experimente online!

Execute todos os casos de teste - para pontuar, conte tudo [na saída.

O polinômio de entrada é tomado como uma lista de pares de coeficientes (numerador, denominador) na ordem da menor para a maior potência de x. (0, 1)(zero) é usado para poderes ausentes.

A saída é fornecida com cada integral representada por uma lista [f,t,a,b]para representar ∫ a b f d t

Verificação

Aqui está uma versão um pouco menos eficiente que gera uma sintaxe válida do Mathematica para integração, que pode ser testada em um notebook online. Infelizmente, programas de tamanho decente não serão concluídos em um notebook grátis.

aqui , role para baixo, "Create New Notebook", cole (Wolfram Language Input) e avalie (Shift + Enter) (Observe que o uso do teclado numérico Enter não funciona) .

Explicação

Usa estas equações:

-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

Ligações


@ l4m2 Adicionei os links à pergunta para que possamos remover esses comentários. Obrigado.
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

ouZ=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 integrais = pontuação 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

Experimente online!

Use principalmente estas duas equações:

\ 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 integrais = pontuação 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

Experimente online!

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui


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'));
Equação-

Basta editar sua resposta existente. Não precisamos de uma resposta separada para cada tentativa com uma pontuação diferente. Além disso, as imagens da equação incluídas nem valem a pena incluir porque não são legíveis.
mbomb007

1
@ mbomb007 Normalmente, coloco uma solução semelhante e uma solução bastante diferente. As poucas vezes anteriores eu encontrei alguns símbolos não-autorizados usado quando eu recebo a imagem, assim que eu mantê-lo aqui para mais fácil ver que é legal
l4m2
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.