একটি ট্রি বিল্ডিং অ্যালগরিদম রিফ্যাক্টর করুন।
কিছু ওয়েব ফোরামে ট্রি লেআউট থাকে, তাই পোস্টগুলো ট্রি আকারে দেখানো হয়। তবে পোস্টগুলো সাধারণত ডেটাবেজে সাজানো নেই এমন একগুচ্ছ রেকর্ড হিসেবে জমা থাকে। তাই ব্যবহারকারীকে পোস্টগুলো দেখানোর সময় ট্রি স্ট্রাকচারটি নতুন করে তৈরি করতে হয়।
আপনার কাজ হবে এমন একটি কোড রিফ্যাক্টর করা, যা কাজ করে কিন্তু ধীর ও কুৎসিত, আর অত্যন্ত অ্যাবস্ট্র্যাক্টেড রেকর্ডের জন্য ট্রি বিল্ডিং লজিক বাস্তবায়ন করে। রেকর্ডগুলোতে শুধু একটি ID নম্বর ও একটি প্যারেন্ট ID নম্বর থাকে। ID নম্বরটি সর্বদা 0 (সহ) থেকে রেকর্ড অ্যারের দৈর্ঘ্যের (অসহ) মধ্যে থাকে। রুট রেকর্ড ছাড়া বাকি সব রেকর্ডের প্যারেন্ট ID তাদের নিজের ID থেকে ছোট। আর রুট রেকর্ডের প্যারেন্ট ID তার নিজের ID-এর সমান।
একটি উদাহরণ ট্রি:
root (ID: 0, parent ID: 0)
|-- child1 (ID: 1, parent ID: 0)
| |-- grandchild1 (ID: 2, parent ID: 1)
| +-- grandchild2 (ID: 4, parent ID: 1)
+-- child2 (ID: 3, parent ID: 0)
| +-- grandchild3 (ID: 6, parent ID: 3)
+-- child3 (ID: 5, parent ID: 0)
কখনও কখনও এক্সেপশন রেইজ করা প্রয়োজন হয়। এমন করার সময় সবসময় একটি অর্থপূর্ণ এরর মেসেজ দিতে হবে, যাতে বোঝা যায় এররটির উৎস কী। এতে আপনার কোড আরও পড়ার উপযোগী হয় এবং ডিবাগিংয়ে যথেষ্ট সাহায্য করে। যেসব ক্ষেত্রে আপনি জানেন যে এররের উৎসটি নির্দিষ্ট কোনো টাইপ হবে, সেখানে আপনি বিল্ট-ইন এরর টাইপগুলোর একটি রেইজ করা বেছে নিতে পারেন, তবে তবুও একটি অর্থপূর্ণ মেসেজ দিতে হবে।
এই নির্দিষ্ট অনুশীলনীতে অবৈধ ট্রি ইনপুটের জন্য ValueError "থ্রো" করতে raise স্টেটমেন্ট কোথায় এবং কীভাবে ব্যবহার করা হয়, তা রিফ্যাক্টর করতে বলা হয়েছে। টেস্ট পাস হবে কেবল তখনই, যখন কোডটি যথাযথ exception raise করবে এবং তার সঙ্গে একটি যথাযথ মেসেজও দেবে।
Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।