ত্রিভুজ

ত্রিভুজ

মধ্যম

নির্দেশনা

একটি ত্রিভুজ সমবাহু, সমদ্বিবাহু, না বিষমবাহু, তা নির্ণয় করুন।

সমবাহু ত্রিভুজের তিনটি বাহুর দৈর্ঘ্যই সমান।

সমদ্বিবাহু ত্রিভুজের অন্তত দুটি বাহুর দৈর্ঘ্য সমান। (কখনও কখনও এটিকে ঠিক দুটি বাহুর দৈর্ঘ্য সমান হিসেবে উল্লেখ করা হয়, তবে এই অনুশীলনীর উদ্দেশ্যে আমরা অন্তত দুটি বলব।)

বিষমবাহু ত্রিভুজের সব বাহুর দৈর্ঘ্য ভিন্ন।

দ্রষ্টব্য

কোনো আকৃতি ত্রিভুজ হতে গেলে তার প্রতিটি বাহুর দৈর্ঘ্য > 0 হতে হবে, এবং যেকোনো দুটি বাহুর দৈর্ঘ্যের যোগফল তৃতীয় বাহুর দৈর্ঘ্যের চেয়ে বড় বা সমান হতে হবে।

Note

অবক্ষয়ী ত্রিভুজ হলো এমন ত্রিভুজ যেখানে দুটি বাহুর দৈর্ঘ্যের যোগফল তৃতীয় বাহুর দৈর্ঘ্যের সমান, যেমন 1, 1, 2। এই অনুশীলনীতে আমরা অবক্ষয়ী ত্রিভুজের জন্য টেস্ট যোগ না করার সিদ্ধান্ত নিয়েছি। আপনি চাইলে ওই পরিস্থিতিগুলো সামলাতে পারেন, অথবা নিশ্চিন্তে সেগুলো উপেক্ষা করতে পারেন।

সমীকরণে:

ধরা যাক a, b, এবং c ত্রিভুজের বাহু। তাহলে নিচের তিনটি এক্সপ্রেশনই সত্য হতে হবে:

a + b ≥ c
b + c ≥ a
a + c ≥ b

দেখুন ত্রিভুজ অসমতা

এটির বাস্তবায়ন নানা রকম হতে পারে। আপনি কোন পদ্ধতি নেবেন, তার উপর নির্ভর করে নিচের কিছু বিষয় আপনার কাজে লাগতে পারে।

আর হয়তো আপনি এমন একটি পদ্ধতি বের করবেন যেটি এগুলোর কোনোটিই ব্যবহার করে না!

দৈর্ঘ্য যখন ইন্টিজার নয়

মূল অনুশীলনীতে এমন ত্রিভুজ শনাক্ত করার পরীক্ষা হয়, যার সব বাহুই ইন্টিজার। তবে কিছু ত্রিভুজকে শুধু ইন্টিজার দিয়ে প্রকাশ করা যায় না। সহজ একটি উদাহরণ হলো দৈর্ঘ্য ১-এর দুটি সমান বাহুর মাঝে ৯০ ডিগ্রি কোণ বিশিষ্ট একটি ত্রিভুজ। এর তৃতীয় বাহুর দৈর্ঘ্য ২-এর বর্গমূল, যা একটি অমূলদ সংখ্যা (অর্থাৎ এটিকে ইন্টিজার বা ভগ্নাংশ হিসেবে লেখা যায় না)।

ইন্টিজার আর ফ্লোটিং-পয়েন্ট, দুই ক্ষেত্রই সামলাতে বিশ্লেষণী ফাংশনগুলো নতুন করে লেখা কষ্টকর, আর সম্ভাব্য সব ইন্টিজার ও ফ্লোটিং-পয়েন্ট টাইপের জন্য তা করা তো আরও কষ্টকর: ৮, ১৬, ৩২, ৬৪ আর ১২৮ বিট প্রস্থের সাইনড ও আনসাইনড রূপ হিসাব করলে, ফ্লোটের কথা চিন্তা করার আগেই তা দাঁড়ায় মূলত একই কোডের ১০টি আলাদা বাস্তবায়নে!

এর চেয়ে ভালো একটি উপায় আছে: জেনেরিক। আপনার Triangle-কে Triangle<T> হিসেবে লিখলেই আপনি কোড লিখবেন একবার, আর ওই সব স্পেশালাইজেশন তৈরির কাজ কম্পাইলারের হাতে ছেড়ে দিতে পারবেন। মনে রাখবেন, গাণিতিক অপারেশন ব্যবহার করতে হলে আপনার জেনেরিক টাইপকে ট্রেইটের সাহায্যে সীমাবদ্ধ করতে হবে, যাতে তা কেবল সেইসব টাইপকেই বোঝায় যেগুলো ওই অপারেশনগুলো সমর্থন করে।

কিছু বোনাস টেস্ট আছে, যেগুলো চালিয়ে আপনি ফ্লোটিং-পয়েন্ট সংখ্যায় আপনার বাস্তবায়ন পরীক্ষা করতে পারেন। সেগুলো চালু করতে generic ফিচার ফ্ল্যাগ দিয়ে আপনার টেস্টগুলো রান করুন, এভাবে:

cargo test --features generic
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Rust Exercism

ত্রিভুজ শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Rust ট্র্যাকের 99টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।