Buat fungsi yang mengambil persamaan polinomial, nilai untuk x
dan mengembalikan hasil operasi.
Contoh: diberikan 4x^2+2x-5
dan x=3
keluaran 37
. Ini adalah hasil dari4(3)^2+2(3)-5
- Asumsikan semua polinomial valid
- Format polinom akan selalu
coefficient(variable)^exponent => 4x^2
kecuali:- Ketika eksponen
1
itu akan terjadicoefficient(variable) => 4x
- Ketika koefisien
1
itu akan(variable)^exponent => x^2
- Ketika eksponen
- Polinomial hanya satu variabel
- Penggunaan perpustakaan eksternal dilarang
- Koefisien dan input variabel dapat berupa angka positif dan negatif.
Uji kasus
("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
Memperbarui
- Format polinom akan selalu
coefficient(variable)^exponent => 4x^2
kecuali:- Ketika eksponen
1
itu akan terjadicoefficient(variable) => 4x
- Ketika koefisien
1
itu akan(variable)^exponent => x^2
- Ketika eksponen
- Menghapus aturan eksponen negatif. Kesalahanku. Polinomial yang valid tidak mengandung eksponen negatif
- Eksponen
0
akan adilcoefficient
- Menambahkan test case untuk
input 0
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
code-golf
math
polynomials
Luis felipe De jesus Munoz
sumber
sumber
3x^3-5x^2+2x-10
bisakah kita input3*x^3-5*x^2+2*x-10
? Atau[3 -5 2 -10]. [3 2 1 0]
?Jawaban:
JavaScript (ES7), 48 byte
Berdasarkan saran dari @RickHitchcock
Diharapkan
X
dalam huruf besar. Mengambil input dalam sintaks currying(p)(X)
.Cobalah online!
JavaScript (ES7), 49 byte
Pendekatan yang sama dengan @DeadPossum . Mengambil input dalam sintaks currying
(p)(x)
.Cobalah online!
sumber
replace
:p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
f
kecuali kecuali sudah termasuk dalam jumlah byte, dengan biaya 2 byte yang seharusnya disimpan. Saya suka metode ini. Mungkin ada cara untuk menyimpan satu atau dua byte dengan cara memperbaikinya.X
huruf besar, maka kita bisa melakukannyaa<{}?'*X':'**'
, menghemat satu byte. Karena itu pertanyaan saya kepada OP.x
sendiri1x
untukx
.Python 2 , 54 byte
-2 byte terima kasih kepada Jo King
-5 byte terima kasih kepada Arnauld
Cobalah online!
sumber
Python 3 ,
535048 bytesunting : -5 bytes berkat Dennis!
Cobalah online!
Digunakan
translate
untuk menghindarireplace
panggilan chaining ; Versi Python 3translate
kurang canggung dari versi pendahulunya.sumber
"*(%d)"%x
bisa menjadi"*(x)"
.x
dalameval
lingkup saya ! Saya akan memperbarui.x
bukan lagi representasi string,"*x"
berfungsi juga.R , 44 byte
Cobalah online!
Cukup mudah dengan R. Ganti
nx
dengann*x
dan kemudianeval
yangparse
d tali.x
digunakan karena ini adalah bagaimana kita menamai argumen kedua.Fungsi eval bahkan bisa digunakan lebih langsung dengan argumen pertama diformat dengan benar, dan argumen formal lainnya (
y
,z
, dll) dapat dengan mudah ditambahkan:R , 20 byte (tidak bersaing)
Cobalah online!
sumber
Japt 2.0, 13 byte
Cobalah .
Penjelasan:
sumber
Bahasa Wolfram (Mathematica) , 22 byte
Cobalah online!
sumber
JavaScript (Node.js) ,
113108 byteCobalah online!
Terima kasih kepada @Arnauld
Karena solusi JS terbaik sejauh ini oleh @Arnauld (49 bytes) telah diposting dan digunakan
eval
, saya memutuskan untuk menggunakan Regex dan menguranginya.Cukup panjang dibandingkan dengan miliknya.
Penjelasan:
sumber
-
alih- alih[-]
,~b.indexOf`x`
alih-alihb.indexOf`x`>0
dan menghapusl=
yang tidak digunakan. (Tapi ini tidak memperbaiki bug.)1x^-2
pada-
.05AB1E ,
1619 byte+3 byte sebagai perbaikan bug untuk input negatif
x
..E
( Jalankan sebagai kode Batch ) telah diganti dengan Jalankan sebagai Pythoneval
dalam komit terbaru dari @Adnan , tetapi versi ini belum TIO. @ Mr.Xcoder mengujinya pada 05AB1E lokal (versi terbaru) untuk memverifikasi itu berfungsi.Lihat versi ini tanpa
.E
melihat bagaimana itu mengubah string ekspresi.Penjelasan:
Alternatif
2528 byte program yang bekerja pada versi TIO saat ini:Cobalah online.
Penjelasan:
“…¢(“
adalah stringprint(
, karena:“
dan“
memulai dan mengakhiri string yang dikompresi…¢
sama dengan0426
karena melihat indeks dalam file info.txt , di mana…
memiliki indeks 4, dan¢
memiliki indeks 26.0426
ini kemudian digunakan dalam file kamus , di mana baris 427 (indeks 426) adalah kata yang diambilnya, yangprint
dalam hal ini.(
memiliki indeks dalam file info.txt, jadi ia ditafsirkan apa adanya.sumber
JavaScript (Node.js) , 143 byte
Saya tahu ada jawaban yang lebih baik tetapi saya ingin melakukannya tanpa menggunakan eval
Cobalah online!
sumber
[a-z0-9.]
melakukannya? Satu-satunya huruf yang dapat muncul adalahx
. Adakah alasannya.
? Anda tidak perlu menangani koefisien atau eksponen non-integer.Physica , 35 byte
Cobalah online!
sumber
Jelly , 21 byte
Cobalah online!
sumber
("-20x^2+20x-50", -8)
.Java 8,
150149148 byteTidak yakin apakah mungkin memiliki fungsi lambda kari yang melempar Pengecualian. Jika ya, 1 byte dapat disimpan dengan mengubah-1 byte terima kasih kepada @ OlivierGrégoire karena menunjukkan kepada saya bagaimana melakukan ini.(s,n)->
ken->s->
.Cobalah online.
Penjelasan:
Sayangnya eval JavaScript tidak mendukung
**
, jadi saya harus menggunakan lagi ganti untuk mengubahnya menjadiMath.pow
sebaliknya ..sumber
**
(ES7 +), mengapa ini tidak mendukungnya?eval
. Dan saya pikir ini built-in JavaScript-eval saya dapat menggunakan denganScriptEngineManager
belum diperbarui di Java JDK selama bertahun-tahun, sehingga tidak mendukungES7+
..TI-Basic, 6 byte
Ekspresi diambil sebagai argumen dan X dimasukkan selama runtime. Atau 8 byte tanpa
expr
:Di sini kedua argumen dimasukkan saat runtime.
sumber
Oktaf ,
473837 byteMenyimpan banyak byte dengan mengambil input kedua sebagai string, bukan angka.
Cobalah online!
Penjelasan:
Cukup lurus ke depan: Ganti
x
dengan(c)
, di manac
input kedua, dan evaluasi. Parese diperlukan karena dalam Oktaf-8^2 == -64
.sumber
Ruby , 43 byte
Cobalah online!
sumber
Perl 5
-pl
, 35 byteCobalah online!
sumber
Ruby ,
4341 byteCobalah online!
Disimpan dua byte berkat @ Mr.Xcoder
Karena belum ada jawaban Ruby belum saya tambahkan.Nvm ada satu yang menggunakan pendekatan yang berbedaPenjelasan:
sumber
gsub"x","*x"
menghemat dua byte.Excel, 36 + 2 byte, Tidak bersaing
Mengevaluasi bidang Teks sebagai rumus tidak lurus di Excel. Ada yang disembunyikan
=EVALUATE()
fungsi , yang bisa dipanggil dengan mendefinisikan Nama.Di Excel 2007, Rumus> Tetapkan Nama. Tentukan Nama yang dipanggil
E
, dengan Mengacu pada:Kemudian, dengan masukan Formula di
A1
,x
nilaiB1
, memasuki=E
diC1
pengembalian hasil yang diharapkan.sumber
Bahasa Wolfram (Mathematica) , 19 byte
Cobalah online!
Mengambil input oleh currying:
f[x][expr]
.sumber