Créez une fonction qui prend une équation polynomiale, une valeur pour x
et renvoie le résultat de l'opération.
Exemple: donnée 4x^2+2x-5
et x=3
sortie 37
. Ceci est le résultat de4(3)^2+2(3)-5
- Supposons que tous les polynômes sont valides
- Le format polynomial sera toujours
coefficient(variable)^exponent => 4x^2
sauf:- Lorsque l'exposant est,
1
il seracoefficient(variable) => 4x
- Lorsque le coefficient est,
1
il sera(variable)^exponent => x^2
- Lorsque l'exposant est,
- Les polynômes sont une seule variable
- L'utilisation de bibliothèques externes est interdite
- Le coefficient et l'entrée variable peuvent être des nombres positifs et négatifs.
Cas de test
("3x^3-5x^2+2x-10", 5) => 250
("10x^4-5x^3-10x^2+3x+50", 3) => 644
("10x+20", 10) => 120
("-20x^2+20x-50", -8) => -1490
("9", 5) => 9
("8x^2+5", 0) => 5
Mise à jour
- Le format polynomial sera toujours
coefficient(variable)^exponent => 4x^2
sauf:- Lorsque l'exposant est,
1
il seracoefficient(variable) => 4x
- Lorsque le coefficient est,
1
il sera(variable)^exponent => x^2
- Lorsque l'exposant est,
- Suppression de la règle d'exposant négatif. Mon erreur. Un polynôme valide ne contient pas d'exposant négatif
- Un exposant de
0
serait justecoefficient
- Cas de test ajouté pour
input 0
C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
code-golf
math
polynomials
Luis felipe De jesus Munoz
la source
la source
3x^3-5x^2+2x-10
pouvons-nous entrer3*x^3-5*x^2+2*x-10
? Ou[3 -5 2 -10]. [3 2 1 0]
?Réponses:
JavaScript (ES7), 48 octets
Basé sur une suggestion de @RickHitchcock
Attend
X
en majuscules. Prend une entrée dans la syntaxe de curry(p)(X)
.Essayez-le en ligne!
JavaScript (ES7), 49 octets
Même approche que @DeadPossum . Prend une entrée dans la syntaxe de curry
(p)(x)
.Essayez-le en ligne!
la source
replace
:p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
f
moins qu'elle ne soit incluse dans le nombre d'octets, au prix des 2 octets qui sont censés être enregistrés. J'aime bien cette méthode. Il pourrait y avoir un moyen d'enregistrer un ou deux octets en le réorganisant d'une manière ou d'une autre.X
en majuscules, alors nous pouvons le fairea<{}?'*X':'**'
en économisant un octet. D'où ma question au PO.x
seul1x
pourx
.Python 2 , 54 octets
-2 octets grâce à Jo King
-5 octets grâce à Arnauld
Essayez-le en ligne!
la source
Python 3 ,
535048 octetsedit : -5 octets grâce à Dennis!
Essayez-le en ligne!
Utilisé
translate
pour éviter de chaîner lesreplace
appels; La version de Python 3translate
est moins gênante que celle de son prédécesseur.la source
"*(%d)"%x
peut devenir"*(x)"
.x
c'était dans moneval
domaine! Je vais mettre à jour.x
ne s'agit plus d'une représentation sous forme de chaîne, cela"*x"
fonctionne également.R , 44 octets
Essayez-le en ligne!
Assez simple avec R. Remplacez
nx
parn*x
puiseval
laparse
chaîne d.x
est utilisé car c'est ainsi que nous nommons le deuxième argument.La fonction eval pourrait même être plus directement utilisé avec un premier argument correctement mis en forme, et d' autres arguments formels (
y
,z
, etc.) pourrait être facilement ajouté:R , 20 octets (non concurrent)
Essayez-le en ligne!
la source
Japt 2.0, 13 octets
Essayez-le .
Explication:
la source
Wolfram Language (Mathematica) , 22 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) ,
113108 octetsEssayez-le en ligne!
Merci à @Arnauld
Étant donné que la meilleure solution JS jusqu'ici de @Arnauld (49 octets) a déjà été publiée et qu'elle utilise
eval
, j'ai décidé d'utiliser Regex et de réduire à la place de cela.Assez long par rapport à sa pensée.
Explication:
la source
-
au lieu de[-]
,~b.indexOf`x`
au lieu deb.indexOf`x`>0
et en supprimantl=
ce qui n'est pas utilisé. (Mais cela ne corrige pas le bug.)1x^-2
sur le-
.05AB1E ,
1619 octets+3 octets comme correction de bogue pour une entrée négative
x
..E
( Run as Batch code ) a été remplacé par Run as Pythoneval
dans ce dernier commit de @Adnan , mais cette version n'est pas encore sur TIO. @ Mr.Xcoder l'a testé sur son local (dernière version) 05AB1E pour vérifier qu'il fonctionne.Voir cette version sans
.E
voir comment elle a converti la chaîne d'expression.Explication:
Alternative
25programme de 28 octets qui fonctionne sur la version actuelle de TIO:Essayez-le en ligne.
Explication:
“…¢(“
est la chaîneprint(
, car:“
et“
démarre et termine la chaîne compressée…¢
est égal à0426
car il examine les index du fichier info.txt , où…
a l'index 4 et l'¢
index 26.0426
est ensuite utilisé dans le fichier dictionnaire , où la ligne 427 (index 426) est le mot qu'il récupère, ce qui estprint
dans ce cas.(
n'a pas d'index dans le fichier info.txt, il est donc interprété tel quel.la source
JavaScript (Node.js) , 143 octets
Je sais qu'il y a de meilleures réponses mais je voulais le faire sans utiliser eval
Essayez-le en ligne!
la source
[a-z0-9.]
n'est-ce pas? La seule lettre qui peut apparaître estx
. Pourquoi.
? Vous n'avez pas besoin de gérer des coefficients ou des exposants non entiers.Physica , 35 octets
Essayez-le en ligne!
la source
Gelée , 21 octets
Essayez-le en ligne!
la source
("-20x^2+20x-50", -8)
.Java 8,
150149148 octetsJe ne sais pas s'il est possible d'avoir une fonction lambda currying qui lève une exception. Si c'est le cas, 1 octet peut être enregistré en changeant-1 octet merci à @ OlivierGrégoire de m'avoir montré comment faire cela.(s,n)->
enn->s->
.Essayez-le en ligne.
Explication:
Malheureusement, l'évaluation JavaScript ne prend pas en charge
**
, je dois donc utiliser un remplacement plus long pour le convertir à laMath.pow
place ..la source
**
(ES7 +), pourquoi cela ne prend-il pas cela en charge?eval
. Et je pense que cet eval JavaScript intégré que je peux utiliser avecScriptEngineManager
n'a pas été mis à jour dans le JDK Java depuis des années, donc il ne prend pas en chargeES7+
..TI-Basic, 6 octets
L'expression est prise comme argument et X est entré pendant l'exécution. Alternativement 8 octets sans
expr
:Ici, les deux arguments sont entrés au moment de l'exécution.
la source
Octave ,
473837 octetsÉconomisé beaucoup d'octets en prenant la deuxième entrée comme une chaîne au lieu d'un nombre.
Essayez-le en ligne!
Explication:
Assez simple: remplacez
x
par(c)
, où sec
trouve la deuxième entrée, et évaluez. Les parethèses sont nécessaires car à Octave-8^2 == -64
.la source
Rubis , 43 octets
Essayez-le en ligne!
la source
Perl 5
-pl
, 35 octetsEssayez-le en ligne!
la source
Rubis ,
4341 octetsEssayez-le en ligne!
Sauvegardé deux octets grâce à @ Mr.Xcoder
Puisqu'il n'y a pas encore de réponse Ruby, j'en ai ajouté une.Nvm il y en avait un qui utilisait une approche différenteExplication:
la source
gsub"x","*x"
économise deux octets.Excel, 36 + 2 octets, non concurrent
L'évaluation d'un champ de texte en tant que formule n'est pas simple dans Excel. Il existe une
=EVALUATE()
fonction cachée , qui peut être appelée en définissant un nom.Dans Excel 2007, Formules> Définir le nom. Définissez un nom appelé
E
, avec Fait référence à:Puis, avec l' entrée de la formule dans
A1
, lax
valeur enB1
entrant=E
dans lesC1
rendements résultat escompté.la source
Wolfram Language (Mathematica) , 19 octets
Essayez-le en ligne!
Prenez entrée par curryfication:
f[x][expr]
.la source