Порахуйте набрані очки на дошці для гри го.
У грі го (також відомій як baduk, igo, cờ vây та wéiqí) очки отримують, повністю оточуючи порожні перетини своїми каменями. Оточені перетини гравця називають його територією.
Обчисліть територію кожного гравця. Можна припустити, що будь-які камені, які опинилися в території супротивника, вже знято з дошки.
Визначте територію, яка містить указану координату.
Кілька порожніх перетинів можуть бути оточені одночасно, і для оточення враховуються лише горизонтальні та вертикальні сусіди. На наступній діаграмі камені, які мають значення, позначено «O», а камені, які не мають, позначено «I» (ігноровані). Порожні пробіли позначають порожні перетини.
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
Точніше кажучи, порожній перетин є частиною території гравця, якщо всі його сусіди - це або камені цього гравця, або порожні перетини, які належать до території цього гравця.
Докладніше можна дізнатися у Вікіпедії або в Sensei's Library.
Іноді виникає потреба викликати виняток. Коли ми це робимо, варто завжди додавати інформативне повідомлення про помилку, яке вказує на її джерело. Це робить код читабельнішим і суттєво допомагає під час налагодження. Якщо відомо, що джерело помилки має певний тип, можна викликати один із вбудованих типів помилок, але повідомлення все одно має бути інформативним.
У цій вправі потрібно використати інструкцію raise, щоб «кинути» ValueError, коли координати неправильні. Тести пройдуть лише за умови, що ми і викличемо exception за допомогою raise, і додамо до нього повідомлення.
Щоб викликати ValueError з повідомленням, передайте повідомлення як аргумент типу exception:
# when the coordinates for the piece are invalid
raise ValueError('Invalid coordinate')
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.