Polynôme -> Intégrer

11

Étant donné un polynôme dans une variable avec des coefficients rationnels, sortez une expression équivalente ne contenant que des 1variables et des intégrales définies. Par exemple, - x 2 peut être exprimé par ∫ x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Toute méthode d'entrée / sortie raisonnable est autorisée.

Exemples:

\ 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

Votre score sera la longueur de votre code multipliée par le nombre de symboles utilisés sur les cas de test. Vous devriez pouvoir noter votre programme. Le score le plus bas l'emporte.

Cas de 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

Le golf va être difficile, car je ne peux pas jouer uniquement au code ou à la sortie, et je ne sais donc pas si un changement aidera ou nuira à mon score jusqu'à ce que je l'essaie, ce qui est nul à mon avis.

Ne laissez pas le score restreindre votre création. Vous êtes invités à répondre avec principalement une partie du score bien optimisée, même si l'autre est mal partie.

l4m2
la source
liés . Dupliquer?
Olivier Grégoire
@ OlivierGrégoire Travail
inversé
Il s'agit d'un défi intéressant, aggravé par son système de notation. Je pouvais instantanément réclamer un score de 0 , quelle que soit la longueur de mon code, simplement en attribuant chr(8747)(ou équivalent) à une variable, et en l'utilisant comme signe, n'encourant aucune occurrence du symbole. Je recommanderais fortement d'en faire un défi de golf en code vanille.
caird coinheringaahing
3
@cairdcoinheringaahing Peu importe que vous utilisiez un format de sortie, par exemple 0=[1,1,1], il est toujours compté comme "1 ". Ainsi, vous ne pouvez obtenir que 0 score sur le cas de test 1etx
l4m2 le
1
Personnellement, je pense que ce serait mieux comme une question de code-golf. Toute solution sera impressionnante, donc je ne pense pas qu'il soit nécessaire d'exiger le moins d'intégrations possible.
mbomb007

Réponses:

5

Python 2 , 315 octets * 5113 = 1610595 score

Je travaille toujours sur le golf du score. Le golf va être difficile, car je ne peux pas jouer uniquement au code ou à la sortie, et je ne sais donc pas si un changement aidera ou nuira à mon score jusqu'à ce que je l'essaie, ce qui est nul à mon avis.

Malgré l'ennui de jouer au golf, j'ai apprécié le calcul.

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

Essayez-le en ligne!

Exécutez tous les cas de test - pour marquer, compter tout [dans la sortie.

Le polynôme d'entrée est considéré comme une liste de paires de coefficients (numérateur, dénominateur) dans l'ordre de la puissance la plus faible à la plus élevée de x. (0, 1)(zéro) est utilisé pour les pouvoirs manquants.

La sortie est donnée avec chaque intégrale représentée par une liste [f,t,a,b]pour représenter ∫ a b f d t

Vérification

Voici une version légèrement moins golfée qui génère une syntaxe Mathematica valide pour l'intégration, qui peut être testée dans un cahier en ligne. Malheureusement, les programmes de taille décente ne se termineront pas dans un cahier gratuit.

Allez ici , faites défiler vers le bas, "Créer un nouveau bloc-notes", collez (Wolfram Language Input) et évaluez (Shift + Enter) (Notez que l'utilisation du pavé numérique Enter ne fonctionne pas) .

Explication

Utilise ces équations:

-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

Liens

mbomb007
la source
@ l4m2 J'ai ajouté les liens vers la question afin que nous puissions supprimer ces commentaires. Merci.
mbomb007
Définir Z(n)comme 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 octets * 5113 intégrales = 777176 score

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

Essayez-le en ligne!

Utilisez principalement ces deux équations:

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

l4m2
la source
0

JavaScript (Node.js) , 220 octets * 616 intégrales = 135520 score

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

Essayez-le en ligne!

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

l4m2
la source
Équation-> 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'));
l4m2
Modifiez simplement votre réponse existante. Nous n'avons pas besoin d'une réponse distincte pour chaque tentative avec un score différent. De plus, les images d'équation que vous avez incluses ne valent même pas la peine d'être incluses car elles ne sont pas lisibles.
mbomb007
1
@ mbomb007 Habituellement, je place une solution similaire ensemble et des solutions très différentes séparées. Les quelques fois précédentes, j'ai trouvé des symboles non autorisés utilisés lorsque j'obtiens l'image, donc je la garde ici pour voir plus facilement qu'elle est légale
l4m2