با توجه به موقعیت دو وزیر روی یک تختهی شطرنج، مشخص کنید که آیا آنها طوری قرار گرفتهاند که بتوانند به یکدیگر حمله کنند یا نه.
در بازی شطرنج، وزیر میتواند به مهرههایی حمله کند که در همان سطر، ستون یا قطر قرار دارند.
یک تختهی شطرنج را میتوان با یک آرایهی ۸ در ۸ نمایش داد.
پس اگر به شما بگویند وزیر سفید در c5 است (با اندیس صفر در ستون ۲ و سطر ۳) و وزیر سیاه در f2 (با اندیس صفر در ستون ۵ و سطر ۶)، آنوقت میدانید که چیدمان به این شکل است:
شما همچنین میتوانید پاسخ دهید که آیا وزیرها میتوانند به یکدیگر حمله کنند یا نه. در این حالت، پاسخ بله است؛ آنها میتوانند، چون هر دو مهره روی یک قطر مشترک قرار دارند.
تصویر تختهی شطرنج را 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 تمیزتر باشد.