مسیرها
/
Roc
Roc
/
تمرین‌ها
/
حمله‌ی وزیر
حمله‌ی وزیر

حمله‌ی وزیر

آسان

دستورالعمل‌ها

با توجه به موقعیت دو وزیر روی یک تخته‌ی شطرنج، مشخص کنید که آیا آن‌ها طوری قرار گرفته‌اند که بتوانند به یکدیگر حمله کنند یا نه.

در بازی شطرنج، وزیر می‌تواند به مهره‌هایی حمله کند که در همان سطر، ستون یا قطر قرار دارند.

یک تخته‌ی شطرنج را می‌توان با یک آرایه‌ی ۸ در ۸ نمایش داد.

پس اگر به شما بگویند وزیر سفید در c5 است (با اندیس صفر در ستون ۲ و سطر ۳) و وزیر سیاه در f2 (با اندیس صفر در ستون ۵ و سطر ۶)، آن‌وقت می‌دانید که چیدمان به این شکل است:

یک تخته‌ی شطرنج با دو وزیر. پیکان‌هایی که از وزیر در c5 بیرون می‌آیند، جهت‌های ممکن حمله در طول ستون، ردیف و قطر را نشان می‌دهند.

شما همچنین می‌توانید پاسخ دهید که آیا وزیرها می‌توانند به یکدیگر حمله کنند یا نه. در این حالت، پاسخ بله است؛ آن‌ها می‌توانند، چون هر دو مهره روی یک قطر مشترک قرار دارند.

اعتبار

تصویر تخته‌ی شطرنج را habere-et-dispertire با استفاده از LaTeX و بسته‌ی chessboard ساخته‌ی Ulrike Fischer ساخته است.

پیاده‌سازی

در شطرنج، به سطرها «rank» و به ستون‌ها «file» می‌گویند. محدوده‌ی «rank» از ۱ تا ۸ و محدوده‌ی «file» از A تا H است.

در این تمرین، Square یک «نوع داده‌ی مبهم» است که یک خانه روی صفحه‌ی شطرنج را نمایش می‌دهد. این نوع در درون خود از فیلدهای row و column استفاده می‌کند که اندیس‌شان از صفر شروع می‌شود و تضمین می‌کند که این فیلدها همیشه معتبر باشند (یعنی از ۰ تا ۷).

تابع create یک Str را به‌عنوان ورودی می‌گیرد که یک خانه‌ی معتبر روی صفحه‌ی شطرنج را با نشانه‌گذاری رسمی، مانند "C5"، نمایش می‌دهد. تابع create باید این Str را تجزیه کند، بررسی کند که آیا یک خانه‌ی معتبر را نشان می‌دهد یا نه، و اگر چنین بود، یک مقدار Square را برگرداند که فیلدهای مناسب row و column را در خود دارد. «rank» ۱ متناظر با سطر ۰ و «rank» ۸ متناظر با سطر ۷ است. برای مثال، create("C5") باید خانه‌ای با سطر ۴ و ستون ۲ برگرداند.

نوع Square همچنین متدهای کاربردی rank و file را در اختیار می‌گذارد. در مثال بالا، rank باید عدد صحیح 5 را برگرداند و file باید کاراکتر 'C' را برگرداند.

در پایان، تابع queen_can_attack دو مقدار Square متفاوت را می‌گیرد و بررسی می‌کند که آیا وزیرهایی که روی این خانه‌ها قرار می‌گیرند می‌توانند به یکدیگر حمله کنند یا نه.

نکته‌ی مهم: نوع‌های داده‌ی مبهمی مانند Square زمانی عالی‌اند که بخواهید تضمین‌هایی ارائه دهید، مثلاً این که row و column همیشه بین ۰ و ۷ باشند. نوع‌های داده‌ی مبهم همچنین جزئیات پیاده‌سازی را از کاربران پنهان می‌کنند و همین باعث می‌شود API تمیزتر باشد.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Roc Exercism

آماده‌اید حمله‌ی وزیر را شروع کنید؟

در Exercism ثبت‌نام کنید تا Roc را همراه با 120 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.