এই চ্যালেঞ্জটি এমএটিএল ভাষার কিছু বৈশিষ্ট্যের সাথে সম্পর্কিত, মে 2018 এর ভাষার ইভেন্ট ইভেন্টের অংশ হিসাবে । সংযুক্ত চ্যালেঞ্জ: ফাংশন ক্লিপবোর্ড: অনুলিপি ।
ভূমিকা
এমএটিএল এর ফাংশন ক্লিপবোর্ডগুলি সাধারণ, ইনপুট গ্রহণের ক্রিয়াকলাপের জন্য চারটি সাম্প্রতিক কলগুলির ইনপুটগুলি ("অনুলিপিগুলি") সঞ্চয় করে। সাধারণ ফাংশনগুলি এমএটিএল-এ সর্বাধিক সাধারণ ফাংশন। ইনপুট নেওয়া মানে ফাংশনটি কমপক্ষে একটি ইনপুট নেয়। সঞ্চিত ক্লিপবোর্ডের সামগ্রীগুলি স্ট্যাকের উপরে ধাক্কা দেওয়া যায় ("আটকানো")।
এই চ্যালেঞ্জটি ক্লিপবোর্ডের সামগ্রীগুলিকে ইনপুট হিসাবে গ্রহণ করবে। এটি ধরে নেওয়া হবে যে ক্লিপবোর্ডের রাজ্য তৈরি করেছে এমন সমস্ত ফাংশন ইনপুট হিসাবে এক বা একাধিক ধনাত্মক পূর্ণসংখ্যা নিয়েছিল took সুতরাং ক্লিপবোর্ডের রাজ্যটি সংখ্যার তালিকার একটি তালিকা দ্বারা প্রতিনিধিত্ব করা যায়। (ক্লিপবোর্ডটি আসলে কীভাবে পূর্ণ হয় সে সম্পর্কিত আরও তথ্যের জন্য সম্পর্কিত চ্যালেঞ্জ দেখুন; তবে এটি বর্তমানের জন্য প্রয়োজনীয় নয়)।
ক্লিপবোর্ডের বিষয়বস্তু ব্যাখ্যা করা
উদাহরণ 1
প্রথম ভেতরের তালিকা বোঝায় সাম্প্রতিকতম ফাংশন কল, ইত্যাদি, সুতরাং ক্লিপবোর্ড রাষ্ট্র
[[11, 28], [12, 16], [4], [5, 6]]
নির্দেশ করে যে গত ফাংশন কল দুটি ইনপুট গ্রহণ, যথা 11
, 28
; দ্বিতীয় গত কল ইনপুট গ্রহণ 12
, 16
; ইত্যাদি (এই ক্লিপবোর্ডের রাজ্য সম্পর্কিত চ্যালেঞ্জের প্রথম উদাহরণে কোড দ্বারা উত্পাদিত হয়)।
উদাহরণ 2
যদি পর্যাপ্ত ফাংশন কল না করা থাকে তবে ক্লিপবোর্ডের কিছু অভ্যন্তরীণ তালিকা খালি থাকবে:
[[7, 5], [], [], []]
(এটি এমন কোনও প্রোগ্রাম দ্বারা উত্পাদিত হয়েছে যা কেবল যোগ করে 7
এবং 5
)।
উদাহরণ 3
ফাংশন কলগুলিতে যেকোন সংখ্যক ইনপুট থাকতে পারে তবে সর্বদা কমপক্ষে 1
(কোনও ইনপুট না নেওয়া ফাংশনগুলি ক্লিপবোর্ডের স্থিতি পরিবর্তন করে না)। সুতরাং নিম্নলিখিতটিও সম্ভব।
[[3], [2, 40, 34], [7, 8, 15], []]
ক্লিপবোর্ডের সামগ্রীগুলি অ্যাক্সেস করা
ফাংশন ক্লিপবোর্ডের বিষয়বস্তুগুলি এমএটিএল এর ফাংশন ব্যবহার করে স্ট্যাকের উপরে ধাক্কা দেওয়া হয় M
(যা উপায় দ্বারা কোনও সাধারণ ফাংশন নয়, তবে একটি ক্লিপবোর্ড ফাংশন)। এই ফাংশনটি ইনপুট হিসাবে একটি ধনাত্মক পূর্ণসংখ্যার গ্রহণ করে এবং ক্লিপবোর্ডের কিছু বিষয়বস্তু নীচে স্ট্যাকের উপরে ঠেলে দেয়। ক্লিপবোর্ডের রাজ্যের উদাহরণ সহ 1:
[[11, 28], [12, 16], [4], [5, 6]]
1M
ফেরৎ সমস্ত ইনপুট সাম্প্রতিকতম ফাংশন কল করা হয়। সুতরাং, বিবেচনা উদাহরণস্বরূপ, এটি দেয়11
,28
।- একইভাবে,
2M
,3M
এবং4M
দ্বিতীয় সমস্ত ইনপুট ফিরে তৃতীয় ও চতুর্থ সাম্প্রতিকতম ফাংশন কল। সুতরাং2M
দেয়12
,16
;3M
দেয়4
; এবং4M
দেয়5
,6
। - তার পরেও নাম্বার
4
সিলেক্ট পৃথক ইনপুট ফাংশন কল নেন একাধিক ইনপুট। তাই5M
ফেরৎ গত ইনপুট সাম্প্রতিকতম যেমন কল। আমাদের ক্ষেত্রে এটি দেয়28
।6M
ফেরৎ পূর্ববর্তী পৃথক ইনপুট, যা11
।7M
দ্বিতীয়-শেষ কলটির শেষ ইনপুট দেয় , যা16
, এবং8M
দেয়12
। এখন,9M
দেয়6
। কীভাবে ইনপুট4
এড়ানো যায় তা নোট করুন কারণ এটির ফাংশন কলের একমাত্র ইনপুট ছিল । শেষ পর্যন্ত,10M
দেয়5
।
ক্লিপবোর্ড রাজ্যের জন্য উদাহরণস্বরূপ 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
দেয়3
।2M
দেয়2
,40
,34
।3M
দেয়7
,8
,15
।4M
অপরিবর্তিত আচরণ রয়েছে (এই চ্যালেঞ্জের উদ্দেশ্যে), কারণ সেখানে কেবল তিনটি ফাংশন কল এসেছে।5M
দেয়34
।6M
দেয়40
।7M
দেয়2
।8M
দেয়15
।9M
দেয়8
,10M
দেয়7
।11M
,,12M
... এরও অপরিবর্তিত আচরণ রয়েছে ।
চ্যালেঞ্জ
ইনপুট :
- ক্লিপবোর্ডের রাজ্য, তালিকার তালিকা হিসাবে বা অন্য কোনও যুক্তিসঙ্গত বিন্যাস হিসাবে;
- ধনাত্মক পূর্ণসংখ্যা n ।
আউটপুট : ইনপুট হিসাবে এনM
সহ ফাংশন কল করার ফলাফল । আউটপুটটি দ্ব্যর্থহীন বিভাজক সহ এক বা একাধিক সংখ্যা বা কোনও যুক্তিসঙ্গত বিন্যাসে যেমন একটি তালিকা বা অ্যারে হবে।
ব্যাখ্যা:
- ক্লিপবোর্ডের রাজ্যে সংখ্যার চারটি তালিকা থাকে। উদাহরণস্বরূপ 2 এবং 3 হিসাবে কিছু অনুসরণযোগ্য তালিকাগুলি খালি থাকতে পারে, যদি পছন্দ হয় তবে আপনি খালি তালিকাগুলি অনুসরণ না করে ক্লিপবোর্ডটি ইনপুট করতে পারেন। উদাহরণস্বরূপ 3 হয়ে যাবে
[[3], [2, 40, 34], [7, 8, 15]]
। - ক্লিপবোর্ডের সমস্ত নম্বর সম্ভবত একাধিক সংখ্যার সাথে ইতিবাচক পূর্ণসংখ্যার হবে।
- নম্বর এনটি বৈধ হওয়ার গ্যারান্টিযুক্ত। সুতরাং উপরে 3 উদাহরণস্বরূপ,
n
হতে পারে4
বা হতে পারে না11
।
অতিরিক্ত নিয়ম:
ইনপুট এবং আউটপুট যে কোনও যুক্তিসঙ্গত উপায়ে নেওয়া যেতে পারে ।
কোনও প্রোগ্রামিং ভাষায় প্রোগ্রাম বা ফাংশন অনুমোদিত । স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ ।
বাইটস মধ্যে সংক্ষিপ্ত কোড।
পরীক্ষার মামলা
Clipboard state
Number
Output(s)
[[11, 28], [12, 16], [4], []]
2
12, 16
[[11, 28], [12, 16], [4], []]
5
28
[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144
[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4
[[30], [40], [50, 60], [70, 80, 90]]
2
40
[[30], [40], [50, 60], [80, 90]]
7
90
[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5
[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2