मैंने सुना है कि यदि आप इसे रिवर्स में इंडेंट करते हैं तो आपका कोड तेजी से चल सकता है, ताकि कंपाइलर इसे "शाखाओं" के बहुत ऊपर से ट्री डिजाइन पैटर्न की तरह प्रोसेस कर सके। यह मदद करता है क्योंकि गुरुत्वाकर्षण आपके कोड को संकलित करने में लगने वाले समय को गति देगा, और डेटा संरचना दक्षता में सुधार होता है। यहाँ एक उदाहरण है, जावा स्क्रिप्टिंग में:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
लेकिन किसी कारणवश नोटपैड के पास स्वचालित रूप से ऐसा करने के लिए कोई सेटिंग नहीं है, इसलिए मुझे इसे करने के लिए एक कार्यक्रम की आवश्यकता है।
विवरण
सबमिशन को इनपुट के रूप में एक कोड स्निपेट लेना होगा, इंडेंटेशन को उल्टा करना होगा और परिणामी कोड को आउटपुट करना होगा।
यह निम्नलिखित प्रक्रिया द्वारा किया जाता है:
कोड को लाइनों में विभाजित करें। प्रत्येक पंक्ति शून्य या अधिक रिक्त स्थान के साथ शुरू होगी (कोई टैब नहीं होगा)।
कोड में सभी अद्वितीय इंडेंटेशन स्तर का पता लगाएं। उदाहरण के लिए, उपरोक्त उदाहरण के लिए, यह होगा
0 4 8 12
इंडेंटेशन स्तरों की इस सूची के क्रम को उल्टा करें, और उलटी सूची को मूल सूची में मैप करें। यह शब्दों में व्याख्या करना कठिन है, लेकिन उदाहरण के लिए, यह ऐसा लगेगा
0 — 12 4 — 8 8 — 4 12 — 0
इस मैपिंग को मूल कोड पर लागू करें। उदाहरण में, 0-स्पेस-इंडेंटेशन वाली एक पंक्ति 12 स्थानों से इंडेंट हो जाएगी, 4 स्पेस 8 स्पेस बन जाएंगे, आदि।
इनपुट आउटपुट
इनपुट और आउटपुट तब भी प्रदान किया जा सकता है जब आप चाहें (STDIN / STDOUT, फ़ंक्शन पैरामीटर / रिटर्न वैल्यू, आदि); यदि आपकी भाषा मल्टीलाइन इनपुट का समर्थन नहीं करती है (या आप बस नहीं करना चाहते हैं), तो आप |
इसके बजाय लाइनों को अलग करने के लिए चरित्र का उपयोग कर सकते हैं ।
इनपुट में केवल मुद्रण योग्य ASCII + newlines शामिल होंगे, और इसमें खाली लाइनें नहीं होंगी।
परीक्षण के मामलों
इनपुट:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
आउटपुट: ऊपर उदाहरण कोड।
इनपुट:
a
b
c
d
e
f
g
h
आउटपुट:
a
b
c
d
e
f
g
h
इनपुट:
1
2
3
2
1
आउटपुट:
1
2
3
2
1
इनपुट:
foo
आउटपुट:
foo