Bu meydan okuma ama daha iyi bir spesifikasyon ile.
spec
Programınız tek bir değişken içeren doğrusal bir denklem alır x
ve değerini verir x
.
Giriş / Ayrıştırma
- Giriş yalnızca sayılar, işleçler, parantez (
()
)x
ve bir=
işaret içerecektir (bu boşluk olmadığı anlamına gelir). - Parantez daima dengelenir.
- Her zaman en az 1 olacak
x
. Birx
çok sayıda yer alabilir. - Tüm denklemlerin bir sonucu olacaktır.
Bu adımlar izlenerek bir sayı tanımlanabilir. Çok sayıda normal ifade tarafından tanımlanabilir: -?(\d+(\.\d+)?|\.\d+)
.
Normal ifade bilmiyorsanız: Bir rakam şu şekilde tanımlanır: 0-9
- Bu bir olabilir
-
It nım negatif başında - Sonra bazı rakamlar olabilir . Eğer herhangi bir rakam değilse ondalık nokta olacaktır
- Ondalık basamak varsa, en az bir basamak onu izler
En büyük sayı / değer dilinizin yetenekleri tarafından tanımlanır.
Bir operatör şunlardan biridir: +-*/
her zaman sayılar arasında veya parantez içinde görünür
bu (5)(5)
basitlik uğruna geçerli bir girdi değildir.
Parantez içinde daima geçerli bir ifade (geçerli bir sayı ve / veya operatör kombinasyonu) bulunur. "Dengeli" parantez, her (
birinin ilişkili bir kapanışı olacağı için tanımlanır)
Değerlendirme
- İşlem sırası izlenmeli ve öncelikler (en yüksekten en düşüğe):
- Parantez (önce en derin yuvalanmış olan)
- Çarpma ve Bölme
- Ekleme çıkarma
- Aynı önceliğe sahip iki operatör oluşursa sola gitmeyi tercih etmelisiniz -> sağa
Çıktı
Sonucu bir şekilde çıkarmalısınız. Sadece sayı sonucu çıkarmazsanız, cevabınızda çıktının nasıl çıktılandığını netleştirin. Çıktı biçiminiz tutarlı olmalıdır. Çıktı ondalık olabilir, ancak her zaman mantıklı olacaktır, hassasiyet dilinizin hassasiyeti ile sınırlıdır. Yalnızca diliniz kayan noktalı aritmetiği desteklemiyorsa, onu desteklemenize gerek yoktur.
kurallar
- Bu görevi önemsizleştiren yerleşik öğelere izin verilir, ancak
[uses built-in]
yanıtın başlığına açıkça eklemeniz gerekir . Bu, cevabınızı kazanmaktan muaf tutar - "Bu görevi önemsizleştiren yerleşik öğeler" şunlardan biridir:
- Bir denklemi alan ve bir / değişkeninin değerini veren bir şey
- Bir denklemi tamamen basitleştirecek bir şey
eval
Önemli miktarda ayrıştırma yapmak veya ilişkili bir işlev kullanmak . Kullanımıeval
onlar için kullanılan ve eğer ilgili fonksiyonlar doğrusal denklemleri çözmek (girişine minimum modifikasyonla) izin verilmez.- Şüpheniz varsa, sadece bir yorum isteyin.
- Denklemi ayrıştırmaya izin verilen yerleşikler
Örnekler
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
GEÇERSİZ Girişler:
(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
zorluğu önemsizleştiriyor mu? Ayrıca, new Function(...)
sayım biçimleri olur mu?