Utwórz funkcję, która pobiera równanie wielomianowe, wartość x
i zwraca wynik operacji.
Przykład: dany 4x^2+2x-5
i x=3
wynik 37
. To wynik4(3)^2+2(3)-5
- Załóżmy, że wszystkie wielomiany są prawidłowe
- Format wielomianowy zawsze będzie
coefficient(variable)^exponent => 4x^2
z wyjątkiem:- Kiedy wykładnik
1
to będziecoefficient(variable) => 4x
- Gdy będzie
1
to współczynnik , będzie(variable)^exponent => x^2
- Kiedy wykładnik
- Wielomiany są tylko jedną zmienną
- Korzystanie z bibliotek zewnętrznych jest zabronione
- Współczynnik i zmienne wejściowe mogą być dodatnimi i ujemnymi liczbami.
Przypadki testowe
("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
Aktualizacja
- Format wielomianowy zawsze będzie
coefficient(variable)^exponent => 4x^2
z wyjątkiem:- Kiedy wykładnik
1
to będziecoefficient(variable) => 4x
- Gdy będzie
1
to współczynnik , będzie(variable)^exponent => x^2
- Kiedy wykładnik
- Usunięto zasadę wykładnika ujemnego. Mój błąd. Prawidłowy wielomian nie zawiera wykładnika ujemnego
- Wykładnik
0
byłby sprawiedliwycoefficient
- Dodano przypadek testowy dla
input 0
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
code-golf
math
polynomials
Luis Felipe De Jesus Munoz
źródło
źródło
3x^3-5x^2+2x-10
możemy wprowadzić3*x^3-5*x^2+2*x-10
? Czy[3 -5 2 -10]. [3 2 1 0]
?Odpowiedzi:
JavaScript (ES7), 48 bajtów
Na podstawie sugestii @RickHitchcock
Oczekuje
X
wielkimi literami. Pobiera dane wejściowe w składni curry(p)(X)
.Wypróbuj online!
JavaScript (ES7), 49 bajtów
Takie samo podejście jak @DeadPossum . Pobiera dane wejściowe w składni curry
(p)(x)
.Wypróbuj online!
źródło
replace
:p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
f
chyba że jest ono uwzględnione w liczbie bajtów, kosztem 2 bajtów, które powinny zostać zapisane. Jednak podoba mi się ta metoda. Może istnieć sposób na zaoszczędzenie jednego lub dwóch bajtów poprzez ich przeróbkę.X
wielkie litery, możemy to zrobića<{}?'*X':'**'
, oszczędzając bajt. Stąd moje pytanie do OP.x
sam1x
zax
.Python 2 , 54 bajty
-2 bajty dzięki Jo King
-5 bajtów dzięki Arnauldowi
Wypróbuj online!
źródło
Python 3 ,
535048 bajtówedycja : -5 bajtów dzięki Dennisowi!
Wypróbuj online!
Służy
translate
do unikaniareplace
połączeń łańcuchowych ; Wersja Pythona 3translate
jest mniej niezręczna niż jej poprzednik.źródło
"*(%d)"%x
może zostać"*(x)"
.x
jest w moimeval
zasięgu! Zaktualizuję.x
nie jest już reprezentacją ciągu,"*x"
działa również.R , 44 bajty
Wypróbuj online!
Dość proste z R. Wymień
nx
zn*x
czym ciąg d. jest używany, ponieważ tak nazywamy drugi argument.eval
parse
x
Funkcja eval mogą być używane nawet bardziej bezpośrednio z prawidłowo sformatowany pierwszy argument, a inne argumenty formalne (
y
,z
, itd.) Może być łatwo dodana:R , 20 bajtów (niekonkurencyjny)
Wypróbuj online!
źródło
Japt 2.0, 13 bajtów
Spróbować .
Wyjaśnienie:
źródło
Wolfram Language (Mathematica) , 22 bajty
Wypróbuj online!
źródło
JavaScript (Node.js) ,
113108 bajtówWypróbuj online!
Dzięki @Arnauld
Ponieważ najlepsze dotychczasowe rozwiązanie JS @Arnauld (49 bajtów) zostało już opublikowane i korzysta z niego
eval
, postanowiłem użyć Regex i zmniejszyć zamiast tego.Dość długi w porównaniu do jego.
Objaśnienie:
źródło
-
zamiast[-]
,~b.indexOf`x`
zamiastb.indexOf`x`>0
i usuwając,l=
który nie jest używany. (Ale to nie naprawia błędu.)1x^-2
się na-
.05AB1E ,
1619 bajtów+3 bajty jako poprawka błędów dla negatywnych danych wejściowych
x
..E
( Uruchom jako kod wsadowy ) został zastąpiony przez Uruchom jako Pythoneval
w najnowszym zatwierdzeniu @Adnan , ale ta wersja nie jest jeszcze dostępna w TIO. @ Mr.Xcoder przetestował go na swoim lokalnym (najnowsza wersja) 05AB1E, aby sprawdzić, czy działa.Zobacz tę wersję,
.E
aby zobaczyć, jak przekonwertował ciąg wyrażenia.Wyjaśnienie:
Alternatywny
2528 bajtowy program, który działa na bieżącej wersji TIO:Wypróbuj online.
Wyjaśnienie:
“…¢(“
jest ciągiemprint(
, ponieważ:“
i“
rozpoczyna i kończy skompresowany ciąg…¢
jest równa,0426
ponieważ przegląda indeksy w pliku info.txt , gdzie…
ma indeks 4 i¢
indeks 26.0426
jest następnie używany w pliku słownika , w którym wiersz 427 (indeks 426) jest słowem, które pobiera, coprint
w tym przypadku.(
nie ma indeksu w pliku info.txt, więc jest interpretowany jako taki.źródło
JavaScript (Node.js) , 143 bajty
Wiem, że są lepsze odpowiedzi, ale chciałem to zrobić bez użycia eval
Wypróbuj online!
źródło
[a-z0-9.]
, prawda? Jedyną literą, która może się pojawić, jestx
. Wiesz dlaczego.
? Nie musisz obsługiwać współczynników ani wykładników niecałkowitych.Physica , 35 bajtów
Wypróbuj online!
źródło
Galaretka , 21 bajtów
Wypróbuj online!
źródło
("-20x^2+20x-50", -8)
.Java 8,
150149148 bajtówNie jestem pewien, czy można mieć funkcję curdowania lambda, która zgłasza wyjątek. Jeśli tak, można zapisać 1 bajt, zmieniając-1 bajt dzięki @ OlivierGrégoire za pokazanie mi, jak to zrobić.(s,n)->
nan->s->
.Wypróbuj online.
Wyjaśnienie:
Niestety eval JavaScript nie obsługuje
**
, więc muszę użyć dłuższej zamiany, aby go przekonwertować naMath.pow
...źródło
**
(ES7 +), dlaczego to nie obsługuje?eval
. I myślę, że ta wbudowana wersja JavaScript, z którą mogę korzystaćScriptEngineManager
, nie była aktualizowana w Javie JDK od lat, więc nie obsługujeES7+
..TI-Basic, 6 bajtów
Wyrażenie jest traktowane jako argument, a X jest wprowadzany podczas działania. Alternatywnie 8 bajtów bez
expr
:Tutaj oba argumenty są wprowadzane w czasie wykonywania.
źródło
Oktawa ,
473837 bajtówZaoszczędzono wiele bajtów, przyjmując drugie wejście jako ciąg zamiast liczby.
Wypróbuj online!
Wyjaśnienie:
Dość prosto: zamień
x
na(c)
, gdziec
jest drugie wejście i oceń. Paretheses są konieczne, ponieważ w Octave-8^2 == -64
.źródło
Rubinowy , 43 bajty
Wypróbuj online!
źródło
Perl 5
-pl
, 35 bajtówWypróbuj online!
źródło
Rubin ,
4341 bajtówWypróbuj online!
Zaoszczędzono dwa bajty dzięki @ Mr.Xcoder
Ponieważ nie ma jeszcze odpowiedzi Ruby, dodałem ją.Nvm był taki, który zastosował inne podejścieObjaśnienie:
źródło
gsub"x","*x"
zapisuje dwa bajty.Excel, 36 + 2 bajty, niekonkurencyjny
Ocena pola tekstowego jako formuły nie jest prosta w programie Excel. Istnieje ukryta
=EVALUATE()
funkcja, którą można wywołać, definiując Nazwę.W programie Excel 2007 formuły> Zdefiniuj nazwę. Zdefiniuj nazwę o nazwie
E
, z Odnosi się do:Następnie z wejściem wzorze In
A1
,x
wartościB1
wchodzące=E
wC1
powraca oczekiwanego rezultatu.źródło
Wolfram Language (Mathematica) , 19 bajtów
Wypróbuj online!
Weź wejście przez zmiękczania:
f[x][expr]
.źródło