Önek notasyonunda, operatör argümanlardan önce gelir, böylece operatörün next()
özyinelemeli olarak çağrıldığını hayal edebilirsiniz . Infix gösteriminde, operatör argümanlar arasında gider, böylece onu sadece bir ayrıştırma ağacı olarak hayal edebilirsiniz. Postfix gösterimlerinde, işleç bağımsız değişkenlerden sonra gelir, böylece yalnızca yığın tabanlı olarak hayal edebilirsiniz.
Herhangi bir düzeltme göstergesinde, operatör herhangi bir yere * gidebilir . Bir operatör görünürse ve yeterli sayıda bağımsız değişken yoksa, operatör yeterli bağımsız değişken olana kadar bekler. Bu zorluk için, çok basit bir anyfix değerlendiricisi uygulamanız gerekir. (Not anyfix sana etrafında oynayabileceği terk ettiğini bir eğlence dil olduğunu burada ya check out burada )
Aşağıdaki komutları desteklemeniz gerekir:
(Yardımlaşma 1)
- çiftleme
- olumsuz
(İkili 2)
- ilave
- çarpma işlemi
- eşitlik: döndürür
0
veya1
.
Bu komutlar için beyaz boşluk olmayan beş sembol kullanmayı seçebilirsiniz. Gösteri amaçlı olarak, "
çoğaltma, ×
çarpma ve toplama olarak kullanacağım +
.
Değişmez değerler için, yalnızca negatif olmayan tamsayıları desteklemeniz gerekir, ancak yorumcunuz tüm tamsayıları (dilinizin (makul) tamsayı aralığında) içerebilmelidir.
Bir örneğe bakalım: 10+5
. Depolama alanı bir sıra değil, yığın olarak davranmalıdır. Bu nedenle, ilk önce yığın başlar []
ve sıradaki operatör listesi başlar []
. Daha sonra, 10
yığını oluşturan değişmezi değerlendirilir [10]
. Ardından, +
iki argüman gerektiren operatör değerlendirilir. Ancak, yığın üzerinde yalnızca bir bağımsız değişken vardır, bu nedenle sıraya alınmış işleç listesi olur ['+']
. Daha sonra, 5
yığını oluşturan değişmezi değerlendirilir [10, 5]
. Bu noktada, operatör '+'
yığıtı [15]
ve kuyruğu oluşturacak şekilde değerlendirilebilir []
.
Nihai sonuç olmalıdır [15]
için + 10 5
, 10 + 5
ve 10 5 +
.
En daha sert bir örneğe bakalım: 10+"
. Yığın ve kuyruk olarak başlar []
ve []
. 10
ilk önce yığını yapan değerlendirilir [10]
. Sonra, +
değerlendirilir, bu da yığını değiştirmez (çünkü yeterli bağımsız değişken yoktur) ve kuyruğu yapar ['+']
. Sonra "
değerlendirilir. Bu hemen çalışabilir, böylece yığını yapar [10, 10]
. +
artık yığın [20]
ve kuyruk haline gelebilir []
. Nihai sonuç [20]
.
Operasyon sırası ne olacak?
Hadi bir bakalım ×+"10 10
. Yığın ve kuyruk şu şekilde başlar []
:
×
: Yığın değişmez ve kuyruk olur['×']
.+
: Yığın değişmez ve kuyruk olur['×', '+']
."
: Yığın değişmez ve kuyruk olur['×', '+', '"']
.10
: Yığın olur[10]
.×
İlk göründüğünden beri değerlendirilecek ilk operatör olsa da ,"
hemen çalışabilir ve operatörlerin hiçbiri yapmadan önce çalışabilir, bu yüzden değerlendirilir. Yığın olur[10, 10]
ve kuyruk['×', '+']
.×
artık değerlendirilebilir, bu da yığını[100]
ve kuyruğu yapar['+']
.10
: Yığın[100, 10]
,+
değerlendirilmesine izin veren hale gelir . Yığın olur[110]
ve kuyruk[]
.
Nihai sonuç [110]
.
Bu gösterilerde kullanılan komutlar, herhangi bir düzeltme dilinin komutlarıyla tutarlıdır; ancak, son örnek yorumcumdaki bir hata nedeniyle çalışmaz. (Feragatname: Gönderileriniz herhangi bir düzeltme yorumlayıcısında kullanılmayacaktır)
Meydan okuma
5 boşluk olmayan, rakam olmayan bir karakter kümesi seçin ve yukarıdaki özelliklere göre bir düzeltme yorumlayıcısı oluşturun. Programınız tekil diziyi veya içerdiği değeri çıktılayabilir; değer yığınının yürütme sonunda yalnızca tek bir değer içereceği ve yürütme sonunda operatör sırasının boş olacağı garanti edilir.
Bu kod golf yani bayt en kısa kodu kazanır.
Test Durumları
Bu test durumları için, yinelenen "
, negatif olan -
, toplama +
, çarpma olan ×
ve eşitliktir =
.
Input -> Output
1+2×3 -> 9
1"+"+ -> 4
2"××" -> 16
3"×+" -> 18
3"+×" -> 36
123"= -> 1 ("= always gives 1)
1+2=3 -> 1
1"=2+ -> 3
1-2-+ -> -3
-1-2+ -> 3 (hehe, the `-1` becomes `+1` at the `-` rather than making the `2` a `-1`)
+×"10 10 -> 200 (after the 10 is duplicated (duplication is delayed), 10 + 10 is performed and then 20 * 10, giving 200)
kurallar
- Standart Loopholes Uygula
- İsterseniz anyfix resmi yorumlayıcısını alıp golf oynayabilirsiniz. Korkunç bir şekilde kaybetmeyi bekle.
Girdi bir dize olarak verilir ve bir dizi olarak tek bir tamsayı olarak çıktılanır. Girişin yalnızca boşluk, rakam ve seçtiğiniz 5 karakteri içerdiğini varsayabilirsiniz.
* aslında değil
0
ve 1
?
×+"10 10
test senaryolarını veya 1) boşluk kullanarak ve 2) yinelenen operatörün kullanımını (tamamen kaçırdığım iki şey ) geciktiren diğer örnekleri dahil etmelisiniz .