()[]
Bu noktaları sağlayan dört karakterden oluşan bir dize alan bir program yazın :
- Her sol parantezin
(
eşleşen bir sağ parantez vardır)
. - Her sol köşeli parantezde
[
eşleşen bir sağ köşeli parantez bulunur]
. - Eşleşen parantez ve parantez çiftleri çakışmaz. Örneğin
[(])
, eşleşen parantezler eşleşen parantezlerde tam olarak bulunmadığından veya tam tersi olduğundan geçersizdir. - İlk ve son karakterler eşleşen bir parantez veya parantez çiftidir. Bu yüzden geçerlidir
([]([]))
ve[[]([])]
geçerli[]([])
değildir.
( Girdi biçimi için bir dilbilgisi<input> ::= [<input>*] | (<input>*)
.)
Her eşleşen parantez ve parantez çifti, negatif olmayan bir tamsayı olarak değerlendirilir:
- Eşleşen parantez içindeki çiftlerin değerleri toplanır . Boş eşleşmenin
()
değeri vardır0
. - Eşleşen parantez içindeki çiftlerin değerleri çarpılır . Boş eşleşmenin
[]
değeri vardır1
.
( Bir sayının toplamı veya ürünü aynı sayıdır.)
Örneğin, ([](())([][])[()][([[][]][][])([][])])
parçalanabilir ve şu şekilde değerlendirilebilir 9
:
([](())([][])[()][([[][]][][])([][])]) <input>
(1 (0 )(1 1 )[0 ][([1 1 ]1 1 )(1 1 )]) <handle empty matches>
(1 0 2 0 [(1 1 1 )2 ]) <next level of matches>
(1 0 2 0 [3 2 ]) <and the next>
(1 0 2 0 6 ) <and the next>
9 <final value to output>
Başka bir örnek:
[([][][][][])([][][])([][][])(((((([][]))))))] <input>
[(1 1 1 1 1 )(1 1 1 )(1 1 1 )((((((1 1 ))))))]
[5 3 3 (((((2 )))))]
[5 3 3 ((((2 ))))]
[5 3 3 (((2 )))]
[5 3 3 ((2 ))]
[5 3 3 (2 )]
[5 3 3 2 ]
90 <output>
Programınızın tüm girdi dizesi tarafından temsil edilen tamsayıyı değerlendirmesi ve yazdırması gerekir. Girişin geçerli olduğunu varsayabilirsiniz. Bayt cinsinden en kısa kod kazanır.
Program yerine, bir dize alan ve tamsayıyı yazdıran veya döndüren bir işlev yazabilirsiniz.