Toyland-এ ট্রেনগুলো সবসময় ব্যস্ত থাকে, শহরজুড়ে চকচকে মার্বেল থেকে শুরু করে দুর্লভ বিল্ডিং ব্লক পর্যন্ত মূল্যবান সামগ্রী পৌঁছে দিতে। যে রেলপথে তারা চলে তা রঙিন ডমিনো আকৃতির টুকরো দিয়ে তৈরি, যার প্রতিটিতে দুটি সংখ্যা লেখা থাকে। ট্রেন চলার জন্য ডমিনোগুলো দিয়ে এমন একটি নিখুঁত চেইন তৈরি হতে হবে যেখানে সংখ্যাগুলো মিলে যায়।
আজ দুর্লভ খেলনার একটি জরুরি ডেলিভারি আটকে পড়েছে। পরীক্ষা করে দেখার জন্য আপনাকে এক সেট রেলপথের টুকরো দেওয়া হয়েছে। যদি এগুলো দিয়ে অবিচ্ছিন্ন একটি চেইন তৈরি করা যায়, তবে ট্রেনটি ছুটে যাবে, Toyland জুড়ে হাসি ছড়িয়ে দেবে। না হলে সেটটি বাদ পড়বে, আরেকটি দিয়ে চেষ্টা করা হবে।
এই ধাঁধাটি সমাধানের ভরসা খেলনাগুলো আপনার ওপরেই রেখেছে। ডমিনোগুলো কি রেলপথ জুড়ে দিয়ে ট্রেনকে ছুটিয়ে দেবে, নাকি সেটটি পিছনে পড়ে থাকবে?
ডমিনো দিয়ে একটি শৃঙ্খল তৈরি করুন।
ডমিনোর একটি নির্দিষ্ট সেট এমনভাবে সাজানোর একটি উপায় বের করুন, যাতে সেগুলো একটি সঠিক ডমিনো শৃঙ্খল গঠন করে। শৃঙ্খলে একটি পাথরের এক অর্ধেকের বিন্দুগুলো অবশ্যই পাশের পাথরের সংলগ্ন অর্ধেকের বিন্দুর সাথে মিলতে হবে। এছাড়াও, যেসব পাথরের প্রতিবেশী নেই (প্রথম ও শেষ পাথর), সেই পাথরগুলোর অর্ধেকের বিন্দুগুলো পরস্পরের সাথে মিলতে হবে।
উদাহরণস্বরূপ, [2|1], [2|3] এবং [1|3] পাথরগুলো দেওয়া থাকলে আপনার এমন কিছু বের করা উচিত, যেমন [1|2] [2|3] [3|1] বা [3|2] [2|1] [1|3] বা [1|3] [3|2] [2|1] ইত্যাদি, যেখানে প্রথম ও শেষ সংখ্যা একই।
[1|2], [4|1] এবং [2|3] পাথরের ক্ষেত্রে যে শৃঙ্খল পাওয়া যায় তা সঠিক নয়: [4|1] [1|2] [2|3]-এর প্রথম ও শেষ সংখ্যা একই নয়।
4 != 3
কিছু টেস্ট কেসে শৃঙ্খলের সমাধানে একই পাথর একাধিকবার ব্যবহার হতে পারে; ধরে নিন যে একাধিক ডমিনো সেট ব্যবহার করা হচ্ছে।
শুধু একটি Go func ডিফাইন করুন, MakeChain নামে, যা ডমিনোর একটি স্লাইস নেয় এবং একটি বৈধ ডমিনো-চেইন গঠনের চেষ্টা করে।
MakeChain-এর সিগনেচারটি নিচের মতো হওয়া উচিত:
type Domino [2]int
func MakeChain(input []Domino) (chain []Domino, ok bool)
ok বুলিয়ান ফলাফলটি বোঝায় যে প্রদত্ত ইনপুট ডমিনো তালিকাটি একটি বৈধ চেইনে সাজানো সম্ভব কিনা।
একটি খালি ইনপুট তালিকা বৈধ বলে ধরা হয়, আর যে ডমিনোর দুই পাশ একই, সেটিও বৈধ বলে ধরা হয়।
'chain' ফলাফলটি শূন্য বা তার বেশি ডমিনোর একটি স্লাইস, যেগুলো এমন ক্রমে সাজানো থাকে যা বৈধ চেইনটি দেখায়। এটা স্বাভাবিক (এবং প্রত্যাশিতও) যে 'input'-এর ডমিনোগুলো ঘোরাতে হতে পারে, যাতে প্রতিটি পাশ চেইনে তার সংলগ্ন ডমিনোর সাথে মিলে যায়। চেইনের শুরু ও শেষ প্রান্তের ডমিনোগুলোর বাইরের পাশও মিলতে হবে।
যদি প্রদত্ত ইনপুট ডমিনো স্লাইসটি একটি বৈধ চেইনে সাজানো না যায়, তবে MakeChain চেইন ফলাফলের জন্য nil রিটার্ন করতে পারে, কিন্তু ok ফলাফলের জন্য অবশ্যই false রিটার্ন করবে।
যেহেতু একটি প্রদত্ত ইনপুট তালিকার জন্য একাধিক বৈধ চেইন বিন্যাস থাকতে পারে, তাই ok ট্রু হলে টেস্ট প্রোগ্রামটি চেইনটির শুধু বৈধতাই যাচাই করবে।
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।