Stack Cats geri dönüşümlü, yığın tabanlı bir dildir. Tersinir doğası biraz garip döngüler yaratır. Bu zorluk koşullu döngü ile ilgilidir (...)
. Bu döngüler belirli yollarla iç içe yerleştirildiğinde, iç içe geçme derinliğini azaltmak için kodu dönüştürmek mümkündür. Kurallar ( rastgele bir parçacığın nerede A
ve nerede B
durduğu):
- Bir döngü başka bir döngü ile başladığında, iç döngüyü öne çıkarabiliriz:
((A)B)
olur(A)(B)
. - Bir döngü başka bir döngü ile sona erdiğinde, iç döngüyü sonuna kadar çıkarabiliriz:
(B(A))
olur(B)(A)
. - Boş döngüler,,
()
programdan tamamen kaldırılabilir. Bir sonuç olarak (diğer kurallarla birlikte),((A))
eşdeğerdir(A)
.
Kalır, sadece, iç içe geçmiş halkalar formu olduğu (A(B)C)
yerde, A
, B
ve C
boş olmayan bulunmaktadır.
Meydan okuma
Size geçerli bir Stack Cats programı veriliyor ve göreviniz, yukarıdaki dönüşümleri kullanarak boş döngüler bırakmadan, ilmeklerin iç içe geçme düzeyini mümkün olduğunca azaltmaktır.
Geçerli bir Stack Cats programı ...
- ... sadece karakterlerden oluşuyor
()/\<>[]{}!"*+-:=ITX^_|
. - ... ayna simetrisine sahiptir (örn.
\(]{}!{}[)/
geçerli bir programdır, ancak/|/
değildir). - ... doğru uyumlu ve iç içe olan
()
ve{}
([]
,<>
ve\/
onlar yüzünden ayna simetrisi şartına çiftler halinde görünürsünüz rağmen mutlaka her zamanki gibi eşleştirilecek gerekmez).
Girdi olarak bir dize veya bir karakter listesi alabilirsiniz, ancak çıktının aynı biçimde sunulması gerekir.
Bir program veya işlev yazabilir ve girdi alma ve çıktı sağlama gibi standart yöntemlerimizden herhangi birini kullanabilirsiniz . Bu boşlukların varsayılan olarak yasak olduğunu unutmayın .
Bu kod golf , bu yüzden bayt cinsinden ölçülen en kısa geçerli cevap kazanır.
Test Durumları
Test senaryolarının her biri boş satırlarla ayrılmış iki satırdır (giriş ve çıkış). Bir çıkışın boş olduğunu unutmayın. Ayrıca boş girişi desteklemeniz gerekir (bu da boş çıktıya neden olur).
(((=+|+=)))
(=+|+=)
({(=+|+=)})
({(=+|+=)})
((\)/)I(\(/))
(\)(/)I(\)(/)
(()()(())()())
((<|>((X((T)))[_]))\^/(([_](((T))X))<|>))
(<|>)(X)(T)([_])(\^/)([_])(T)(X)(<|>)
(...)
döngüler için geçerlidir .
\^/
parantez içinde?
(<|>((X((T)))[_]))
ve (([_](((T))X))<|>)
.
((A)B(C))
, daha (A)(B)(C)
sonra her iki kural 1 ve 2'den kaynaklanacaktır: ((A)B(C))
→ (A)(B(C))
(kural 1) → (A)(B)(C)
(kural 2).
()
, bu nedenle bir girdi{{A}B}
olduğu gibi kalacaktır ve çıkarılmayacak{A}{B}
mı?