वर्ष 930 है, और ग्रेगोरियन चर्च को समस्या हो रही है। उनके हजारों गाने हैं, जो कि संगीत के हैं, लेकिन समस्या यह है कि सभी शीट संगीत को किसी भी वास्तविक संगठन प्रणाली के बजाय एक ढेर पर फेंक दिया गया है:
कार्टोग्राफर्स गिल्ड में उपयोगकर्ता गेमरप्रिनट द्वारा छवि ।
चर्च को सभी शीट संगीत को व्यवस्थित करने की आवश्यकता है, इसलिए उन्होंने उनके लिए इसे आयोजित करने के लिए एक कार्यक्रम लिखने के लिए एक मध्यकालीन सॉफ्टवेयर इंजीनियर को काम पर रखा है। आप सॉफ्टवेयर इंजीनियर हैं जिन्हें काम पर रखा गया है। हालाँकि, मध्ययुगीन समय में संकलन प्रक्रिया में धीमी बाइबिल ग्रंथों की एक टीम द्वारा कार्यक्रम को कागज पर लिखा जाना शामिल है। अपने कोड को संकलित करने के लिए स्क्राइब की टीम के लिए समय कम करने के लिए, आपको कार्यक्रम को यथासंभव छोटा करना चाहिए।
चर्च चाहता है कि उनके द्वारा लिखे गए संगीत पैमाने के आधार पर जप संगीत का आयोजन किया जाए। चर्च के सभी राग संगीत डोरियन पैमानों में लिखे गए हैं । संगीत के एक निश्चित टुकड़े के नोट्स को देखते हुए, आपका प्रोग्राम डोरियन स्केल को आउटपुट करेगा जो कि इसमें है। यहां, मैं वास्तव में समझाऊंगा कि डोरियन स्केल क्या है। यदि आप पहले से जानते हैं, तो आप इस अनुभाग को छोड़ सकते हैं।
किसी भी राग में 12 संभव नोट हैं। यहाँ वे क्रम में हैं:
C C# D D# E F F# G G# A A# B
एक अर्धविराम ( एक का उपयोग करके दर्शाया गया S
) एक कदम दाईं ओर बढ़ रहा है, चारों ओर लपेटता है (इसलिए बी से एक अर्धांश वापस C पर होगा)। एक टोन ( एक का उपयोग करके दर्शाया गया T
) दो सेमिटोन है। उदाहरण के लिए, F # से एक सेमीिटोन G होगा। F # से एक टोन G # होगा।
डोरियन स्केल बनाने के लिए, हम सूची में किसी भी नोट से शुरू करते हैं, और फिर निम्नलिखित पैटर्न में आगे बढ़ते हैं, उन नोटों को सूचीबद्ध करते हैं जिन्हें हम सामना करते हैं:
T, S, T, T, T, S
एक उदाहरण। मैं ए से शुरू करता हूं। मेरे डोरियन पैमाने के नोट बन जाते हैं:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
पैमाने में ए, बी, सी, डी, ई, एफ #, और जी नोट हैं क्योंकि मैंने ए से शुरू किया था, हम इसे ए में डोरियन स्केल कहेंगे । इसलिए 12 अलग-अलग डोरियन तराजू हैं, जिनमें से प्रत्येक का नाम उस नोट के नाम पर है जिसे उन्होंने शुरू किया था। उनमें से प्रत्येक टोन और सेमीटोन के समान पैटर्न का उपयोग करते हैं, बस एक अलग स्थिति से शुरू होता है। यदि मेरी व्याख्या सुसंगत नहीं है तो आप विकिपीडिया से भी परामर्श कर सकते हैं ।
कार्यक्रम का इनपुट आपके कार्यक्रम के लिए जो भी उपयुक्त हो (जैसे STDIN, कमांड लाइन तर्क raw_input()
) से दिया जा सकता है । यह एक चर में पूर्व-प्रारंभ नहीं हो सकता है। इनपुट अल्पविराम नोटों की एक सूची होगी, जो टुकड़े के माधुर्य का प्रतिनिधित्व करता है। बार-बार नोट आ सकते हैं। इनपुट में हमेशा अलग-अलग नोट होंगे जो निर्णायक रूप से टुकड़े के पैमाने को कम करने में सक्षम होंगे। एक उदाहरण इनपुट:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
कार्यक्रम का आउटपुट स्ट्रिंग होना चाहिए Dorian scale in X
, जहां एक्स पैमाने का शुरुआती नोट है। उदाहरण इनपुट का आउटपुट:
Dorian scale in B
बी ( B C# D E F# G# A
) में डोरियन पैमाने के साथ इसकी तुलना करते हुए हम देखते हैं कि राग के सभी नोट इस पैमाने के भीतर हैं। नोट # इस मामले में अप्रयुक्त है। हालाँकि, B डोरियन को सही कुंजी के रूप में पहचानने के लिए पर्याप्त नोट हैं। कोई अन्य डोरियन स्केल फिट नहीं होता है, क्योंकि जो भी अन्य पैमाना हम आजमाते हैं, उसमें राग का कम से कम एक नोट हमेशा होता है, जो स्केल से संबंधित नहीं होता है।
यह कोड गोल्फ है, इसलिए कम से कम वर्णों के साथ प्रविष्टि जीतती है। यदि आपके कोई प्रश्न हैं, तो टिप्पणियों में पूछें।