पृष्ठभूमि
मिडी फाइलें WAV या MP3 ऑडियो फाइलों से काफी अलग होती हैं। MP3 और WAV फ़ाइलों में ऑडियो की "रिकॉर्डिंग" का प्रतिनिधित्व करने वाले बाइट्स होते हैं, जबकि MIDI फ़ाइलों में MIDI इवेंट्स में संग्रहीत MIDI संदेशों की एक श्रृंखला होती है, जो MIDI सिंथेसाइज़र को बताती है कि कौन सा वाद्य यंत्र बजाना है या MIDI सीक्वेंसर प्लेबैक टेम्पल 2 का उपयोग किया जाना चाहिए। ये संदेश पटरियों में संग्रहीत किए जाते हैं, और पटरियों का एक संग्रह एक MIDI अनुक्रम बनाता है, जिसकी घटनाओं का विश्लेषण एक अनुक्रमक द्वारा किया जा सकता है और इसके संदेश क्रमांक से एक सिंथेसाइज़र रिसीवर को प्रेषित होते हैं।
अधिकांश समय मिडी घटनाओं में संग्रहीत मिडी संदेश नोट ऑन संदेश होते हैं जो सिंथेसाइज़र को एक विशेष नोट चलाने के लिए कहते हैं, या नोट बंद करने वाले संदेश बताते हैं जो सिंथेसाइज़र को नोट चलाने से रोकते हैं। इन संदेशों में दो डेटा बाइट्स होते हैं, जिनमें से पहला नोट के वेग के सिंथेसाइज़र को सूचित करता है (उच्च वेग एक ज़ोर नोट में), और दूसरा जो सिंथेसाइज़र को नोट को खेलने के लिए कहता है (अर्थात मध्य C)। घटनाओं में स्वयं भी टिक होते हैं जो संदेश भेजने के लिए सीक्वेंसर को बताने के उद्देश्य से काम करते हैं।
चुनौती
चुनौती एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिखने की है जो एक एकल-ट्रैक मिडी अनुक्रम में नोट ऑन और नोट ऑफ मिडी संदेशों की एक श्रृंखला का विश्लेषण करती है और किसी विशेष चार्ट के बंद होने पर, और जब वे बंद होते हैं, तब चार्ट दिखाने के लिए आउटपुट करते हैं। इन नोटों का वेग। चार्ट का ऊर्ध्वाधर अक्ष नोट मान का प्रतिनिधित्व करता है और इसे नीचे वर्णित के रूप में लेबल किया जाना चाहिए, और क्षैतिज अक्ष MIDI टिक्स में समय का प्रतिनिधित्व करता है (हालांकि यह जटिलता और रिक्ति के मुद्दों को कम करने के लिए बिना लेबल के रहना चाहिए)।
आपका इनपुट चार अलग-अलग सरणियाँ या सूचियां हो सकती हैं, जिनमें से प्रत्येक पूर्णांक मानों की एक श्रृंखला होती है; द्वि-आयामी सरणी या सूची जिसमें पूर्णांक मानों की एक श्रृंखला के साथ चार उप-सरणियाँ / उप-सूचियाँ होती हैं; या किसी अन्य सुविधाजनक साधन; यह ट्रैक में नोट ऑन और नोट ऑफ संदेशों के साथ संग्रह MIDI घटनाओं का प्रतिनिधित्व करता है। इन सरणियों में से पहला मान नोट निर्दिष्ट करता है, दूसरा वेग, तीसरा नोट इवेंट टिक पर, और चौथा नोट ऑफ इवेंट टिक। उदाहरण के लिए, इन के रूप में चार सरणियाँ दी गई हैं:
{60, 62, 64, 65, 67}
{20, 40, 60, 80, 100}
{ 0, 4, 8, 12, 16}
{ 2, 6, 10, 14, 18}
प्रत्येक ऐरे के पहले तत्व का विश्लेषण करने से दो ईवेंट मिलते हैं: टिक 0 पर एक ईवेंट जिसमें एक संदेश है जिसमें नोट ऑन कमांड, नोट 60 (मध्य C), और 20 के नोट का वेग है; और टिक 2 पर एक घटना जिसमें एक संदेश है जिसमें एक ही नोट और वेग के साथ नोट ऑफ कमांड है।
नियम
चार्ट को बाईं ओर घटते क्रम में प्रदर्शित संख्या (नोट मान का प्रतिनिधित्व करते हुए) के माध्यम से 0 की संख्या को 127 तक पहुंचाना चाहिए, जब नोट शुरू होता है, प्रत्येक नोट की अवधि (नोट ऑफ टिक टिक नोट नोट पर टिक), और नोट का वेग। नोटों का प्रतिनिधित्व करने वाले प्रतीक उनके वेग पर निर्भर हैं:
- 0-15:
O
- 16-31:
=
- 32-47:
#
- 48-63:
-
- 64-79:
@
- 80-95:
+
- 96-111:
0
- 112-127:
*
आप निम्नलिखित मान सकते हैं:
- नोट और वेग के मान सीमा [0, 127] के भीतर होंगे।
- चार सरणियों में से प्रत्येक की लंबाई हमेशा एक दूसरे के बराबर होगी।
कुछ उदाहरण निम्नलिखित हैं:
{60, 62, 64, 65, 67}
{20, 40, 60, 80, 100}
{ 0, 4, 8, 12, 16}
{ 2, 6, 10, 14, 18}
127|
126|
125|
...
67 | 00
66 |
65 | ++
64 | --
63 |
62 | ##
61 |
60 |==
59 |
...
2 |
1 |
0 |
{60, 48, 62, 47, 64, 45, 65, 43, 67, 41, 65, 43, 64, 45, 62, 47, 60, 48}
{63, 31, 75, 90, 12, 23, 122, 104, 33, 19, 57, 42, 5, 82, 109, 86, 95, 71}
{0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16}
{2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18}
127|
126|
...
68 |
67 | ##
66 |
65 | ** --
64 | OO OO
63 |
62 | @@ 00
61 |
60 |-- ++
59 |
...
49 |
48 |== @@
47 | ++ ++
46 |
45 | == ++
44 |
43 | 00 ##
42 |
41 | ==
40 |
...
1 |
0 |
यहाँ एक उदाहरण है जो Ode to Joy के पहले कुछ नोट्स प्रदर्शित करता है:
{48, 55, 64, 64, 65, 67, 55, 67, 65, 64, 62, 52, 55, 60, 60, 62, 64, 55, 64, 62, 62}
{45, 45, 63, 63, 63, 63, 89, 66, 66, 66, 66, 30, 30, 103, 103, 103, 103, 127, 55, 55, 55}
{ 0, 0, 0, 4, 8, 12, 16, 16, 20, 24, 28, 32, 32, 32, 36, 40, 44, 48, 48, 54, 56}
{16, 16, 2, 6, 10, 14, 32, 18, 22, 26, 30, 48, 48, 34, 38, 42, 46, 64, 50, 55, 64}
127|
...
67 | -- @@
66 |
65 | -- @@
64 |-- -- @@ 00 --
63 |
62 | @@ 00 - --------
61 |
60 | 00 00
59 |
58 |
57 |
56 |
55 |################++++++++++++++++================****************
54 |
53 |
52 | ================
51 |
50 |
49 |
48 |################
...
0 |
यदि आपका सबमिशन इनपुट के रूप में वास्तविक MIDI अनुक्रम लेता है, तो आप अपने स्कोर को 25% तक कम कर सकते हैं , अपने चयन के किसी भी ट्रैक के नोट ऑन और नोट ऑफ संदेशों का विश्लेषण करते हैं, बशर्ते इसमें नोट ऑन और नोट ऑफ संदेशों के साथ कम से कम चार इवेंट हों, और आउटपुट जैसा कि ऊपर वर्णित है एक चार्ट।
यह कोड गोल्फ है, इसलिए सबसे छोटा कोड जीतता है। सौभाग्य!