Arka fon
(Gerçek bir kalp anahtarlama hikayesine dayanarak)
Benim zamanımda Lisp ve benzeri dillerle sık sık oynadım. Onlarla yazdım, onları koştum, yorumladım, tasarladım ve makinelerin benim için yazmasını sağladım ... Ve eğer beni rahatsız eden bir şey varsa, benim özel biçimlendirme stilime uymayan Lisp'i görüyor.
Maalesef, bazı metin editörleri ( öksürük XCode öksürüğü ), kod kopyalanıp yapıştırıldığında güzel sekmelerimi ve boşluklarımı çıkarmaya meyilli ... Bu güzel aralıklı Lisp benzeri sözdizimini kullanın:
(A
(B
(C)
(D))
(E))
( ABCDE
Keyfi fonksiyonlar nerede )
BAZI metin editörleri bu güzel kodu aşağıdaki amaca yönlendirir:
(A
(B
(C)
(D))
(E))
Ne dağınıklık! Bu okunabilir değil!
Bana yardım et, burada mı?
Meydan okuma
Bu zorluğun amacı, aşağıda açıklanan biçimde yeni satırlarla ayrılmış bir dizi işlevi almak ve okunabilirliği ve şıklığı vurgulayan daha güzel bir düzenleme döndürmektir.
Girdi
F
Arity N
argümanlarının fonksiyonunu , aşağıdakine benzer bir yapı olarak tanımlarız :
(F (G1 ...) (G2 ...) (G3 ...) ... (GN ...))
nerede G1, G2, ..., GN
ve kendilerini tüm fonksiyonlar bulunmaktadır. Bir aritelik 0
işlevi A
basitçe (A)
bir aritelik 2
işlevi B
biçimindedir(B (...) (...))
Kodunuz, her bir işlevin parantezinden önce (ilk işlev hariç), tek satırlı yeni bir işlev dizisi olarak girdi almalıdır. Yukarıdaki örnek geçerli girdidir.
Şöyle kabul edebilirsiniz:
- Parantezler dengelidir.
- Bir fonksiyonun 250 kezden daha fazla girintili olması gerekmez.
- HER işlev parantezlerle çevrilidir:
()
- Bir fonksiyonun adı sadece yazdırılabilir ASCII karakterleri içerecektir.
- Bir işlevin adı hiçbir zaman parantez veya boşluk içermez.
- Girişte isteğe bağlı son bir satır var.
Çıktı
Kodunuz , yapılan tek değişikliklerin, işlevlerin önde gelen parantezlerinden önceki boşluk veya sekmelerin eklenmesi olduğu aynı işlev kümesini çıkarmalıdır . Çıktı aşağıdaki kurallara uymalıdır:
- Verilen ilk işlev (ve daha sonra en üst düzey işlevler) önünde boşluk olmamalıdır
- Bir işlevin yatay konumuna ilişkin bir argüman, bu işlevin yatay konumunun sağındaki tam olarak bir sekmedir.
- Bir sekme uygulama tanımlıdır, ancak en az 3 boşluk olmalıdır.
- İsteğe bağlı olarak, her satırdan sonra en fazla iki alan yazdırabilirsiniz.
kurallar
- Bu kod-golf: en kısa kod kazanır!
- Standart Loopholes'a izin verilmez.
Örnekler
Giriş:
(A
(B
(C)
(D))
(E))
Çıktı:
(A
(B
(C)
(D))
(E))
Giriş:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
Çıktı:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
Giriş:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
Çıktı:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
()
?