পটভূমি
এমআইডিআই ফাইলগুলি ডাব্লুএইভি বা এমপি 3 অডিও ফাইলগুলির থেকে বেশ আলাদা। এমপি 3 এবং ডাব্লুএইভি ফাইলগুলিতে অডিওর "রেকর্ডিং" উপস্থাপন করে বাইট থাকে, যখন এমআইডিআই ফাইলগুলিতে এমআইডিআই ইভেন্টগুলিতে একটি এমআইডিআই বার্তাগুলি সঞ্চিত থাকে তবে কোন ভার্চুয়াল ইনস্ট্রুমেন্ট বা কোন মিডি সিকোয়েন্সার প্লেব্যাক টেম্পো ব্যবহার করা উচিত তা একটি এমআইডিআই সিন্থেসাইজারকে জানিয়ে দেয়। এই বার্তাগুলি ট্র্যাকগুলিতে সংরক্ষণ করা হয়, এবং ট্র্যাকের একটি সংগ্রহ একটি এমআইডিআই ক্রম তৈরি করে, যার ইভেন্টগুলি সিকোয়েন্সার দ্বারা বিশ্লেষণ করা যেতে পারে এবং এর বার্তাগুলি সিকোয়েন্সার থেকে একটি সিনথেসাইজারের রিসিভারে স্থানান্তরিত করতে পারে।
বেশিরভাগ সময় এমআইডিআই ইভেন্টগুলিতে সংরক্ষিত মিডি বার্তাগুলি নোট অন ম্যাসেজগুলি থাকে যা সিন্থেসাইজারকে কোনও নির্দিষ্ট নোট বাজাতে বলে বা নোট অফ বার্তাগুলি যা সংশ্লেষকে নোটটি বাজানো বন্ধ করতে বলে। এই বার্তাগুলিতে দুটি ডেটা বাইট থাকে, যার মধ্যে প্রথমটি নোটটির বেগের সংশ্লেষকে অবহিত করে (উচ্চতর বেগটি একটি উচ্চতর নোটের ফলস্বরূপ) এবং এর দ্বিতীয়টি সংশ্লেষকে নোটটি খেলতে বলে (অর্থাৎ মিডল সি)। ইভেন্টগুলি নিজেরাই টিকগুলি ধারণ করে যা মেসেজগুলি প্রেরণ করার সময় সিকোয়েন্সারকে বলার উদ্দেশ্যে কাজ করে।
চ্যালেঞ্জ
চ্যালেঞ্জটি হ'ল একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন যা একটি একক ট্র্যাক এমআইডি অনুক্রমের নোট অন এবং নোট অফ এমআইডি ম্যাসেজগুলির একটি সিরিজ বিশ্লেষণ করে এবং নির্দিষ্ট নোটগুলি কখন বন্ধ থাকে তা দেখানো একটি চার্ট বন্ধ করে দেয় এবং এই নোটগুলির বেগ চার্টের উল্লম্ব অক্ষটি নোট মানটি উপস্থাপন করে এবং নীচে বর্ণিত হিসাবে লেবেলযুক্ত হওয়া উচিত, এবং অনুভূমিক অক্ষটি এমআইডিআই টিকগুলিতে সময় উপস্থাপন করে (যদিও এটি জটিলতা এবং ব্যবধানের সমস্যাগুলি হ্রাস করার জন্য লেবেলযুক্ত থাকা উচিত)।
আপনার ইনপুটটি চারটি পৃথক অ্যারে বা তালিকাগুলি হতে পারে, যার মধ্যে প্রতিটি সংখ্যার পূর্ণসংখ্যার মান থাকে; একটি দ্বিমাত্রিক অ্যারে বা চারটি উপ-অ্যারে / উপ-তালিকা সমষ্টির পূর্ণসংখ্যার মানগুলির একটি তালিকা; বা অন্য কোনও সুবিধাজনক উপায়; এটি ট্র্যাকের নোট অন এবং নোট অফ বার্তাগুলির সাথে সংগ্রহের মিডি ইভেন্টগুলি উপস্থাপন করে। এই অ্যারেগুলির প্রথমটির মানগুলি নোটটি নির্দিষ্ট করে, দ্বিতীয় গতিবেগ, ইভেন্ট টিকের তৃতীয় নোট এবং চতুর্থ নোট বন্ধ ইভেন্ট টিক। উদাহরণস্বরূপ, প্রদত্ত চারটি অ্যারে যেমন:
{60, 62, 64, 65, 67}
{20, 40, 60, 80, 100}
{ 0, 4, 8, 12, 16}
{ 2, 6, 10, 14, 18}
প্রতিটি অ্যারের প্রথম উপাদানটি বিশ্লেষণ করে দুটি ইভেন্ট দেয়: একটি ইভেন্টে 0 টিক চিহ্নযুক্ত একটি বার্তা সহ একটি নোট অন কমান্ড, নোট 60 (মিডিল সি) এবং 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 |
এখানে একটি উদাহরণ যা জয়কে ওডের প্রথম কয়েকটি নোট প্রদর্শন করে:
{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 |
আপনি 25% দ্বারা আপনার স্কোর হ্রাস করতে পারেন যদি ইনপুট হিসাবে একটি সত্যিকারের এমআইডিআই ক্রম নেয় তবে নোট অন এবং নোট অফ বার্তাগুলির বিশ্লেষণ করে আপনার পছন্দের কোনও ট্র্যাকের নোট অন এবং নোট অফ বার্তা এবং আউটপুট সহ কমপক্ষে চারটি ইভেন্ট রয়েছে উপরে বর্ণিত একটি তালিকা
এটি কোড গল্ফ, তাই সংক্ষিপ্ততম কোড জয়ী। শুভকামনা!