Écrivez un programme qui effectue une interpolation polynomiale à l' aide de vrais nombres rationnels de précision arbitraire. L'entrée ressemble à ceci:
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7 ...
Vous pouvez supposer qu'il y a exactement un espace avant et après le =
signe, tous les nombres sont soit des fractions soit des entiers. Vous pouvez également supposer que toutes les fractions de l'entrée sont déjà irréductibles.
Aucune vérification d'erreur n'est nécessaire, vous pouvez supposer que l'entrée est valide et qu'aucun x n'est doublé dans le f (x).
La sortie doit être sous une forme compatible LaTeX, le code LaTeX émis doit donner la même représentation graphique que la sortie donnée ici.
f (x) = 123x ^ 2 + \ frac {45} {2} x + \ frac {7} {4}
La fraction doit être réduite autant que possible, par exemple. quelque chose comme \frac{2}{4}
n'est pas autorisé. Si le nombre est entier, n'utilisez pas de fraction.
Règles spéciales:
Votre programme devrait ...
- travailler pour des polynômes jusqu'au degré 12
- terminer en moins de 1 minute pour une entrée raisonnable
- ne pas utiliser de fonctions qui font tout le calcul pour vous
- produire le polynôme du plus petit degré possible
Testcases:
Les cas de test donnés sont juste pour clarification. Votre programme devrait donner un résultat correct pour toutes les entrées correctes.
Contribution
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7
Production
f (x) = - \ frac {4} {105} x ^ 2 + \ frac {26} {105} x + \ frac {16} {35}
Contribution
f (-12) = 13/2 f (5/3) = 3/5 f (13) = -6 f (1/5) = -3/4
Production
f (x) = - \ frac {2186133} {239455744} x ^ 3 + \ frac {2741731} {149659840} x ^ 2 + \ frac {26720517} {29201920} x - \ frac {279464297} {299319680}
Contribution
f (4/3) = 617/81 f (2) = 20/3 f (-8/3) = 6749/81 f (-5) = 7367/12 f (0) = 23/3
Production
f (x) = \ frac {1} {2} x ^ 4 - 2x ^ 3 + \ frac {7} {4} x ^ 2 + \ frac {23} {3}
Contribution
f (0) = 5 f (1) = 7 f (2) = 9 f (3) = 11 f (4) = 13
Production
f (x) = 2x + 5
Contribution
f (1/2) = -1/2 f (-25) = -1/2 f (-54/12) = -1/2
Production
f (x) = - \ frac {1} {2}
...
) font-ils vraiment partie de l'entrée?-\frac{37745}{14592}x^4 - \frac{853249}{43776}x^3 + \frac{57809}{7296}x^2 + \frac{225205}{2736}x + \frac{23}{3}
. Je soupçonne que l'entrée était censée être quelque chose de différent :)Réponses:
J + sh
Script J:
script sh:
Exécutez le script sh:
.
la source
Perl (569 caractères)
Explication détaillée:
commentaires
Modifications
(630 → 585) Réalisé que je peux faire la forme échelon en une boucle au lieu de deux. Ajoutez une explication sous forme de commentaires dans le code.
(585 → 583) Je viens de découvrir la syntaxe du package qui me permet d'utiliser à la
'
place de::
.(583 → 573) Un peu plus de microgolf
(573 → 569) Expression régulière plus courte pour analyser l'entrée
la source
TI-Basic (83/84): 109 caractères
Techniquement 109 caractères, TI-Basic compte dim (, pour (, ->, rref (, [A]) et répertorie comme "un caractère".
L'entrée est formatée en L1 et L2, en paires (x, y) [ex L1 = (1,2,3,4), L2 = (2,3,5,7)].
la source
Méthode Lagrange, Python, 199 octets
Un peu tard, mais ...
la source
Juste une version abrégée du code Fred Freys. Notez que l'on pourrait probablement ignorer le passage de D à l, car il peut simplement le retirer de la portée externe. Comme vous pouvez probablement faire de même avec i ici, nous pourrions même raser un lambda. Je vais le tester un jour.
la source