Erstellen Sie eine Funktion, die eine Polynomgleichung, einen Wert für x
und das Ergebnis der Operation zurückgibt.
Beispiel: gegeben 4x^2+2x-5
und x=3
ausgegeben 37
. Dies ist das Ergebnis von4(3)^2+2(3)-5
- Angenommen, alle Polynome sind gültig
- Das Polynomformat ist immer
coefficient(variable)^exponent => 4x^2
außer:- Wenn Exponent ist
1
, wird es seincoefficient(variable) => 4x
- Wenn Koeffizient ist
1
, wird es sein(variable)^exponent => x^2
- Wenn Exponent ist
- Polynome sind nur eine Variable
- Die Verwendung externer Bibliotheken ist untersagt
- Der Koeffizient und die variable Eingabe können positive und negative Zahlen sein.
Testfälle
("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
Aktualisieren
- Das Polynomformat ist immer
coefficient(variable)^exponent => 4x^2
außer:- Wenn Exponent ist
1
, wird es seincoefficient(variable) => 4x
- Wenn Koeffizient ist
1
, wird es sein(variable)^exponent => x^2
- Wenn Exponent ist
- Die Regel des negativen Exponenten wurde entfernt. Mein Fehler. Ein gültiges Polynom enthält keinen negativen Exponenten
- Ein Exponent von
0
wäre gerechtcoefficient
- Testfall für hinzugefügt
input 0
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
code-golf
math
polynomials
Luis Felipe De Jesus Munoz
quelle
quelle
3x^3-5x^2+2x-10
können wir eingeben3*x^3-5*x^2+2*x-10
? Oder[3 -5 2 -10]. [3 2 1 0]
?Antworten:
JavaScript (ES7), 48 Byte
Basiert auf einem Vorschlag von @RickHitchcock
Erwartet
X
in Großbuchstaben. Übernimmt Eingaben in der Currying-Syntax(p)(X)
.Probieren Sie es online!
JavaScript (ES7), 49 Byte
Gleicher Ansatz wie @DeadPossum . Übernimmt Eingaben in der Currying-Syntax
(p)(x)
.Probieren Sie es online!
quelle
replace
:p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
f
sei denn, er ist in der Byteanzahl enthalten, auf Kosten der 2 Bytes, die gespeichert werden sollen. Ich mag diese Methode allerdings. Es könnte eine Möglichkeit geben, ein oder zwei Bytes zu speichern, indem Sie es irgendwie überarbeiten.X
Großbuchstaben erfassen können, können wira<{}?'*X':'**'
ein Byte speichern. Daher meine Frage an das OP.x
allein1x
fürx
.Python 2 , 54 Bytes
-2 Bytes dank Jo King
-5 Bytes danke an Arnauld
Probieren Sie es online!
quelle
Python 3 ,
535048 Bytesedit : -5 bytes danke an Dennis!
Probieren Sie es online!
Wird verwendet
translate
, um das Verketten vonreplace
Anrufen zu vermeiden . Die Version von Python 3translate
ist weniger umständlich als die des Vorgängers.quelle
"*(%d)"%x
werden kann"*(x)"
.x
es in meinemeval
Anwendungsbereich liegt! Ich werde aktualisieren.x
es keine String-Darstellung mehr gibt"*x"
.R , 44 Bytes
Probieren Sie es online!
Ziemlich einfach mit R. Ersetzen Sie
nx
mitn*x
und danneval
dieparse
d-Zeichenfolge.x
wird verwendet, da wir so das zweite Argument nennen.Die Funktion eval könnte noch direkt mit einem richtig formatierte erstes Argumente und andere formale Argumente (verwendet werden
y
,z
usw.) leicht hinzugefügt werden könnten:R , 20 Bytes (nicht konkurrierend)
Probieren Sie es online!
quelle
Japt 2.0, 13 Bytes
Probieren Sie es aus .
Erläuterung:
quelle
Wolfram Language (Mathematica) , 22 Byte
Probieren Sie es online!
quelle
JavaScript (Node.js) ,
113108 ByteProbieren Sie es online!
Vielen Dank an @Arnauld
Da die bisher beste JS-Lösung von @Arnauld (49 Bytes) bereits gepostet wurde und sie verwendet
eval
, habe ich mich für Regex entschieden und stattdessen reduziert.Ziemlich lang im Vergleich zu seinem.
Erklärung:
quelle
-
statt[-]
,~b.indexOf`x`
stattb.indexOf`x`>0
und Entfernenl=
der nicht verwendet wird. (Aber das behebt den Fehler nicht.)1x^-2
auf dem aufspaltet-
.05AB1E ,
16 bis19 Bytes+3 Bytes als Bugfix für negative Eingaben
x
..E
( Als Batch-Code ausführen ) wurde in diesem letzten Commit von @Adnan durch Als Pythoneval
ausführen ersetzt , aber diese Version ist noch nicht in TIO. @ Mr.Xcoder hat es auf seiner lokalen (neuesten Version) 05AB1E getestet, um zu überprüfen, ob es funktioniert. Sehen Sie sich diese Version an, ohne zu sehen, wie die Ausdruckszeichenfolge konvertiert wurde..E
Erläuterung:
Alternative
2528-Byte- Programm, das auf der aktuellen Version von TIO funktioniert:Probieren Sie es online aus.
Erläuterung:
“…¢(“
ist die Zeichenfolgeprint(
, weil:“
und“
startet und beendet die komprimierte Zeichenfolge…¢
ist gleich,0426
weil es die Indizes in der Datei info.txt betrachtet , wobei…
Index 4 und¢
Index 26 vorhanden sind.0426
wird dann in der Wörterbuchdatei verwendet , wobei Zeile 427 (Index 426) das Wort ist, das abgerufen wird, wasprint
in diesem Fall der Fall ist.(
hat keinen Index in der info.txt-Datei, also interpretiert es so wie es ist.quelle
JavaScript (Node.js) , 143 Byte
Ich weiß, dass es bessere Antworten gibt, aber ich wollte es tun, ohne eval zu verwenden
Probieren Sie es online!
quelle
[a-z0-9.]
? Der einzige Buchstabe, der angezeigt werden kann, istx
. Warum auch immer.
? Sie müssen keine nicht ganzzahligen Koeffizienten oder Exponenten verarbeiten.Physica , 35 Bytes
Probieren Sie es online!
quelle
Jelly , 21 Bytes
Probieren Sie es online!
quelle
("-20x^2+20x-50", -8)
.Java 8,
150149148 BytesIch bin nicht sicher, ob es möglich ist, eine Lambda-Curry-Funktion zu verwenden, die eine Ausnahme auslöst. Wenn ja, 1 Byte kann zu ändern werden gespeichert-1 Byte Danke an @ OlivierGrégoire für die Anleitung .(s,n)->
zun->s->
.Probieren Sie es online aus.
Erläuterung:
Leider wird die JavaScript-Evaluierung nicht unterstützt
**
, sodass ichMath.pow
stattdessen einen längeren Ersatz verwenden muss, um sie zu konvertieren .quelle
**
(ES7 +), warum unterstützt dies das nicht?eval
. Und ich denke, dass diese integrierte JavaScript-Evaluierung, mit der ich arbeiten kann,ScriptEngineManager
seit Jahren nicht mehr im Java JDK aktualisiert wurde, sodass sie nicht mehr unterstützt wirdES7+
.TI-Basic, 6 Bytes
Ausdruck wird als Argument genommen und X wird zur Laufzeit eingegeben. Alternativ 8 Bytes ohne
expr
:Hier werden beide Argumente zur Laufzeit eingegeben.
quelle
Oktave ,
473837 BytesEs wurden viele Bytes gespart, indem die zweite Eingabe als Zeichenfolge anstelle einer Zahl verwendet wurde.
Probieren Sie es online!
Erläuterung:
Ziemlich einfach: Ersetze
x
durch(c)
, woc
ist die zweite Eingabe, und bewerte. Die Parethesen sind da in Oktave notwendig-8^2 == -64
.quelle
Ruby , 43 Bytes
Probieren Sie es online!
quelle
Perl 5
-pl
, 35 BytesProbieren Sie es online!
quelle
Ruby ,
4341 BytesProbieren Sie es online!
Zwei Bytes gespart dank @ Mr.Xcoder
Da es noch keine Ruby-Antwort gibt, habe ich eine hinzugefügt.Nvm gab es eine, die einen anderen Ansatz verwendetErklärung:
quelle
gsub"x","*x"
spart zwei Bytes.Excel, 36 + 2 Bytes, nicht konkurrierend
Das Auswerten eines Textfelds als Formel ist in Excel nicht einfach. Es gibt eine versteckte
=EVALUATE()
Funktion, die durch die Definition eines Namens aufgerufen werden kann.In Excel 2007 Formeln> Name definieren. Definieren Sie einen Namen mit den folgenden Bezeichnungen
E
:Dann wird mit Hilfe der Formel in Eingang
A1
,x
WertB1
, die Eingabe=E
inC1
kehren erwartetes Ergebnis.quelle
Wolfram Language (Mathematica) , 19 Bytes
Probieren Sie es online!
Nehmen Sie Eingabe von currying:
f[x][expr]
.quelle