Traiter des équations en l'absence d'un bon éditeur d'équations est désordonné et désagréable. Par exemple, si je voulais exprimer une intégrale et sa solution, cela pourrait ressembler à ceci:
Intégrale [x ^ 3 e ^ (- mx ^ 2 b / 2), dx] = - ((2 + b m x ^ 2) / (b ^ 2 * e ^ ((b m x ^ 2) / 2) * m ^ 2))
Sur integrals.wolfram.com , cela s'appelle "formulaire de saisie". Personne n'aime voir une équation sous "forme d'entrée". La façon idéale de visualiser cette équation serait:
(Wolfram appelle cette "forme traditionnelle")
Pour ce codegolf, écrivez un programme qui prendra une équation en "forme d'entrée" en entrée et visualisez cette équation dans une représentation ascii de "forme traditionnelle". Donc, pour cet exemple, nous pourrions obtenir quelque chose comme ceci:
/\ 3
| x
| ------------ dx =
| 2
\/ (m x b)/2
e
2
2 + b m x
-(-----------------)
2
2 (b m x )/2 2
b e m
Exigences:
- Ne mélangez pas, ne simplifiez pas ou ne réorganisez pas l'entrée de quelque façon que ce soit. Rendez-le exactement sous la même forme que celle décrite par l'entrée.
- Prend en charge les quatre opérations mathématiques de base (+, -, *, /). Lorsqu'il ne multiplie pas deux nombres adjacents, le symbole * est implicite et doit être omis.
- La prise en charge de l'intégration (comme illustré dans l'exemple ci-dessus) n'est pas requise. Être en mesure de prendre en charge la saisie avec des fonctions comme [...] Integrate ou Sqrt est un bonus.
- Prend en charge les pouvoirs comme indiqué dans l'exemple ci-dessus (la nième racine peut être modélisée en augmentant à la 1 / nième puissance).
- Les parenthèses redondantes (comme celles autour du dénomentateur et du numérateur de la grande fraction dans l'exemple ci-dessus) doivent être omises.
- L'expression au dénominateur et au numérateur d'une fraction doit être centrée au-dessus et au-dessous de la ligne de division horizontale.
- Vous pouvez choisir de commencer ou non une nouvelle ligne après un signe égal. Dans l'exemple ci-dessus, une nouvelle ligne est démarrée.
- L'ordre des opérations doit être exactement le même dans la sortie que dans l'entrée.
Quelques exemples d'entrées et de sorties associées pour tester votre solution:
Contribution:
1/2 + 1/3 + 1/4
Production:
1 1 1
- + - + -
2 3 4
Contribution:
3x^2 / 2 + x^3^3
Production:
2 3
3 x 3
---- + x
2
Contribution:
(2 / x) / (5 / 4^2)
Production:
2
-
x
--
5
--
2
4
Contribution:
(3x^2)^(1/2)
Production:
2 1/2
(3 x )
Réponses:
Python 2, 1666 caractères
La mise en page est en fait assez facile - c'est l'analyse de l'entrée qui est une douleur royale. Je ne suis toujours pas sûr que ce soit complètement correct.
Pour la grande contribution à la question, j'obtiens:
Voici quelques cas de test plus délicats:
Ce dernier est faux, une erreur de priorité dans l'analyseur.
la source