पृष्ठभूमि
(एक सच्ची, दिल दहला देने वाली कहानी पर आधारित)
अपने समय में, मैंने लिस्प और इसी तरह की भाषाओं के साथ अक्सर खेला है। मैंने उनके साथ लिखा है, उन्हें दौड़ाया, उनकी व्याख्या की, उन्हें डिज़ाइन किया, और मशीनों ने मेरे लिए उनके साथ लिखा ... और अगर कोई चीज मुझे परेशान करती है, तो वह लिस्प को देख रही है जो मेरी विशिष्ट प्रारूपण शैली का अनुपालन नहीं करता है।
दुर्भाग्य से, कुछ पाठ संपादकों ( खांसी XCode खांसी ) कोड और कॉपी किया जाता है जब भी मेरी सुंदर टैब और रिक्त स्थान स्ट्रिप करने के लिए करते हैं ... इस सुंदर ढंग से लिस्प-जैसे सिंटैक्स ले लो:
(A
(B
(C)
(D))
(E))
(जहां ABCDE
मनमाने कार्य हों)
कुछ पाठ संपादक कसाई इस प्यारे कोड को निम्न अंत तक ले जाते हैं:
(A
(B
(C)
(D))
(E))
क्या झंझट है! यह पठनीय नहीं है!
मेरी मदद करो, यहाँ?
चुनौती
इस चुनौती में आपका लक्ष्य नीचे वर्णित प्रारूप में newlines द्वारा अलग किए गए कार्यों की एक श्रृंखला लेना है और एक अधिक सुंदर व्यवस्था को वापस करना है जो पठनीयता और लालित्य को उजागर करता है।
इनपुट
हम निम्न के समान निर्माण के रूप F
में आर्गिटी N
तर्कों के एक कार्य को परिभाषित करते हैं:
(F (G1 ...) (G2 ...) (G3 ...) ... (GN ...))
जहां G1, G2, ..., GN
सभी कार्य अपने आप में हैं। एक एरिटी 0
फंक्शन A
बस है (A)
, जबकि एक एरिटी 2
फंक्शन B
फॉर्म का है(B (...) (...))
आपके कोड को प्रत्येक फ़ंक्शन के प्रमुख कोष्ठक (पहले फ़ंक्शन को छोड़कर) से पहले एक नई पंक्ति के साथ फ़ंक्शन की एक श्रृंखला के रूप में इनपुट लेना चाहिए। ऊपर दिया गया उदाहरण वैध इनपुट है।
आप मान सकते हैं:
- कोष्ठक संतुलित हैं।
- एक फ़ंक्शन को 250 से अधिक बार इंडेंट नहीं करना पड़ेगा।
- हर समारोह कोष्ठकों से घिरा हुआ है:
()
- एक फ़ंक्शन के नाम में केवल मुद्रण योग्य ASCII वर्ण होंगे।
- एक फ़ंक्शन के नाम में कोष्ठक या रिक्त स्थान कभी नहीं होंगे।
- इनपुट पर एक वैकल्पिक अनुगामी न्यूलाइन है।
उत्पादन
आपके कोड को फ़ंक्शंस के उसी सेट को आउटपुट करना चाहिए , जहां किए गए एकमात्र परिवर्तन फ़ंक्शंस के प्रमुख कोष्ठक से पहले रिक्त स्थान या टैब के जोड़ हैं। आउटपुट को निम्नलिखित नियमों का पालन करना चाहिए:
- दिए गए पहले फ़ंक्शन (और बाद में शीर्ष-स्तरीय फ़ंक्शन) में कोई पूर्ववर्ती स्थान नहीं होना चाहिए
- किसी फ़ंक्शन के क्षैतिज स्थान पर एक तर्क उस फ़ंक्शन के क्षैतिज स्थान के दाईं ओर एक टैब है।
- एक टैब कार्यान्वयन-परिभाषित है, लेकिन कम से कम 3 स्थान होना चाहिए।
- आप वैकल्पिक रूप से प्रत्येक पंक्ति के बाद अधिकतम दो स्थान प्रिंट कर सकते हैं।
नियम
- यह कोड-गोल्फ है: सबसे छोटा कोड जीतता है!
- मानक लूपहोल्स को बंद कर दिया गया है।
उदाहरण
इनपुट:
(A
(B
(C)
(D))
(E))
आउटपुट:
(A
(B
(C)
(D))
(E))
इनपुट:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
आउटपुट:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
इनपुट:
(-: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)))))
आउटपुट:
(-: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)))))
()
?