দাবা বোর্ডে দুইটি রানির অবস্থান দেওয়া থাকলে, তারা একে অপরকে আক্রমণ করার মতো অবস্থানে আছে কি না তা নির্ণয় করুন।
দাবার খেলায় একটি রানি একই সারি, কলাম বা কর্ণে থাকা গুটি আক্রমণ করতে পারে।
দাবা বোর্ডকে ৮ × ৮ অ্যারে হিসেবে প্রকাশ করা যায়।
তাই যদি আপনাকে বলা হয় যে সাদা রানির অবস্থান c5 (শূন্য-সূচক কলাম ২, সারি ৩) এবং কালো রানির অবস্থান f2 (শূন্য-সূচক কলাম ৫, সারি ৬), তাহলে আপনি বুঝবেন বিন্যাসটি এরকম:
আপনি এও উত্তর দিতে পারবেন যে রানিরা একে অপরকে আক্রমণ করতে পারে কি না। এ ক্ষেত্রে উত্তরটি হবে হ্যাঁ, তারা পারে, কারণ দুইটি গুটি একই কর্ণে অবস্থান করে।
দাবা বোর্ডের ছবিটি তৈরি করেছেন habere-et-dispertire, LaTeX এবং Ulrike Fischer-এর chessboard package ব্যবহার করে।
দাবায় সারিগুলোকে বলা হয় "র্যাঙ্ক", আর কলামগুলোকে বলা হয় "ফাইল"। র্যাঙ্কের পরিসর ১ থেকে ৮, আর ফাইলের পরিসর A থেকে H।
এই অনুশীলনীতে Square হলো একটি ওপেক টাইপ, যা দাবার বোর্ডের একটি ঘর বোঝায়। এটি অভ্যন্তরীণভাবে ০-ইনডেক্সড row ও column ফিল্ড ব্যবহার করে এবং নিশ্চয়তা দেয় যে এগুলো সবসময় বৈধ (অর্থাৎ ০ থেকে ৭)।
create ফাংশনটি ইনপুট হিসেবে একটি Str নেয়, যা অফিসিয়াল নোটেশন ব্যবহার করে দাবার বোর্ডের একটি বৈধ ঘর বোঝায়, যেমন "C5". create ফাংশনটিকে এই Str পার্স করতে হবে, যাচাই করতে হবে যে এটি একটি বৈধ ঘর বোঝায়, আর তা হলে উপযুক্ত row ও column ফিল্ডসহ একটি Square মান রিটার্ন করতে হবে। র্যাঙ্ক ১ মানে row ০, আর র্যাঙ্ক ৮ মানে row ৭। যেমন, create("C5") রিটার্ন করবে এমন একটি ঘর, যার row ৪ এবং column ২।
Square টাইপটি সুবিধাজনক rank ও file মেথডও দেয়। উপরের উদাহরণে rank অবশ্যই ইন্টিজার 5 রিটার্ন করবে, আর file অবশ্যই ক্যারেক্টার 'C' রিটার্ন করবে।
সবশেষে, queen_can_attack ফাংশনটি দুটি আলাদা Square মান নেয় এবং যাচাই করে যে এই ঘরগুলোতে রাখা রানিরা পরস্পরকে আক্রমণ করতে পারে কি না।
মূল কথা: Square-এর মতো ওপেক টাইপ দারুণ কাজে দেয়, যখন আপনি কিছু নিশ্চয়তা দিতে চান, যেমন row ও column সবসময় ০ থেকে ৭-এর মধ্যে থাকে। ওপেক টাইপ ব্যবহারকারীদের কাছ থেকে ইমপ্লিমেন্টেশনের খুঁটিনাটিও লুকিয়ে রাখে, যা API-কে আরও পরিষ্কার করে।
Exercism-এ সাইন আপ করুন, Roc ট্র্যাকের 120টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।