Tantangan ini tetapi dengan spek yang lebih baik.
Spec
Program Anda akan mengambil persamaan linear yang berisi variabel tunggal x
dan menghasilkan nilai x
.
Input / Parsing
- Input hanya akan berisi angka, operator, tanda kurung (
()
)x
, dan=
tanda (ini berarti tidak ada spasi). - Parenthesis akan selalu seimbang.
- Akan selalu ada setidaknya 1
x
. Suatux
dapat didahului dengan suatu angka. - Semua persamaan pasti memiliki satu hasil.
Sebuah nomor dapat didefinisikan dengan mengikuti langkah-langkah ini. Sejumlah dapat didefinisikan oleh regex: -?(\d+(\.\d+)?|\.\d+)
.
Jika Anda tidak berbicara regex: Digit didefinisikan sebagai 0-9
- Mungkin memiliki
-
di awal itu menandakan negatif - Maka mungkin ada beberapa digit. Jika tidak ada digit akan ada titik desimal
- Jika ada titik desimal, setidaknya satu digit akan mengikutinya
Angka / nilai terbesar akan ditentukan oleh kemampuan bahasa Anda.
Sebuah Operator adalah salah satu dari: +-*/
, mereka akan selalu muncul antara angka, dan atau kurung
ini berarti (5)(5)
bukan input yang valid demi kesederhanaan.
Parenthesis akan selalu berisi ekspresi yang valid (kombinasi angka dan / atau operator yang valid) di dalamnya. Tanda kurung "Seimbang" didefinisikan karena setiap (
akan memiliki penutupan terkait)
Evaluasi
- Urutan operasi harus diikuti dan prioritasnya adalah (tertinggi ke terendah):
- Parenthesis (bersarang paling dalam)
- Perkalian & Divisi
- Penambahan & Pengurangan
- Jika dua operator dengan presedensi yang sama terjadi, Anda sebaiknya memilih ke kiri -> kanan
Keluaran
Anda harus menampilkan hasilnya dengan cara tertentu. Jika Anda tidak menampilkan hasil angka saja, jelaskan jawaban Anda bagaimana output itu dihasilkan. Format output Anda harus konsisten. Output mungkin berupa desimal, tetapi akan selalu rasional, ketelitiannya terbatas pada ketepatan bahasa Anda. Hanya jika bahasa Anda tidak mendukung aritmatika floating point, Anda tidak perlu mendukungnya.
Aturan
- Built-in meremehkan tugas ini diizinkan tetapi , Anda harus menambahkan
[uses built-in]
dengan jelas ke header jawaban. Ini mengecualikan jawaban Anda dari kemenangan - "Built-in meremehkan tugas ini" adalah salah satu dari:
- Sesuatu yang mengambil persamaan dan mengeluarkan nilai untuk variabel
- Sesuatu yang sepenuhnya akan menyederhanakan persamaan
- Menggunakan
eval
atau fungsi terkait untuk melakukan parsing dalam jumlah yang signifikan. Penggunaaneval
dan fungsi terkait tidak diizinkan jika digunakan untuk (dengan modifikasi minimal pada input) menyelesaikan persamaan linear. - Jika Anda ragu, tanyakan saja dalam komentar.
- Built-in yang mem-parsing persamaan diperbolehkan
Contohnya
3+4=x
7
4+x=5
1
3+3*3=x
12
3x-4=7+2x
11
3--1=x
4
3*(2+4x)=7x-4
-2
1.2+2.3x=5.8
2
10=4x
2.5
Input tidak valid :
(5)(4)=x no operator between (5) and (4)
5(x+3)=2 no operator 5 and (...)
x=y the only variable is x
4=3 there is no x
x+3=x-7 no solution
x=x infinite solutions
+5=x + is not an unary operator. -5=x would be valid though
1/(x-3)=5 Nonlinear
3/x Nonlinear
eval
dianggap meremehkan tantangan? Juga, akankah bentuk new Function(...)
penghitungan?