Треки
/
Roc
Roc
/
Вправи
/
Атака ферзя
Атака ферзя

Атака ферзя

Легка

Вказівки

За позиціями двох ферзів на шахівниці визначмо, чи розташовані вони так, що можуть атакувати одна одну.

У шахах ферзь може атакувати фігури, які стоять в одному рядку, стовпці або на одній діагоналі.

Шахівницю можна подати як масив 8 на 8.

Отже, якщо відомо, що білий ферзь стоїть на c5 (з індексацією від нуля: стовпець 2, рядок 3), а чорний ферзь на f2 (стовпець 5, рядок 6), то розташування має такий вигляд:

Шахівниця з двома ферзями. Стрілки, що виходять від ферзя на c5, указують можливі напрямки взяття по вертикалі, горизонталі та діагоналі.

Також можна відповісти, чи можуть ферзі атакувати один одного. У цьому випадку відповідь буде ствердною: так, можуть, бо обидві фігури стоять на одній діагоналі.

Подяка

Зображення шахівниці створив habere-et-dispertire за допомогою LaTeX та пакета chessboard Ульріке Фішер.

Реалізація

У шахах рядки називають «горизонталями», а стовпці - «вертикалями». Горизонталі простягаються від 1 до 8, а вертикалі - від A до H.

У цій вправі Square - непрозорий тип, який представляє клітинку на шахівниці. Усередині він використовує поля row і column з індексацією від 0 і гарантує, що вони завжди коректні (тобто від 0 до 7).

Функція create приймає як вхідні дані Str, що представляє коректну клітинку на шахівниці в офіційній нотації, наприклад "C5". Функція create повинна розібрати цей Str, перевірити, що він представляє коректну клітинку, і якщо так, повернути значення Square з відповідними полями row і column. Горизонталь 1 відповідає рядку 0, а горизонталь 8 - рядку 7. Наприклад, виклик create("C5") повинен повернути клітинку, у якій поле row дорівнює 4, а поле column дорівнює 2.

Тип Square також надає зручні методи rank і file. У наведеному вище прикладі rank повинен повернути ціле число 5, а file повинен повернути символ 'C'.

І нарешті, функція queen_can_attack приймає два різні значення Square і перевіряє, чи можуть королеви, розміщені на цих клітинках, атакувати одна одну.

Висновок: непрозорі типи, як-от Square, чудово працюють, коли ми хочемо дати певні гарантії, наприклад, що row і column завжди в межах від 0 до 7. Непрозорі типи також приховують деталі реалізації від користувачів, що робить API чистішим.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Roc Exercism

Час розпочати Атака ферзя?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Roc, а також 120 вправ та справжнє наставництво від людей, і все це безкоштовно.