Порахуйте набрані очки на дошці для гри го.
У грі го (також відомій як baduk, igo, cờ vây та wéiqí) очки отримують, повністю оточуючи порожні перетини своїми каменями. Оточені перетини гравця називають його територією.
Обчисліть територію кожного гравця. Можна припустити, що будь-які камені, які опинилися в території супротивника, вже знято з дошки.
Визначте територію, яка містить указану координату.
Кілька порожніх перетинів можуть бути оточені одночасно, і для оточення враховуються лише горизонтальні та вертикальні сусіди. На наступній діаграмі камені, які мають значення, позначено «O», а камені, які не мають, позначено «I» (ігноровані). Порожні пробіли позначають порожні перетини.
+----+
|IOOI|
|O O|
|O OI|
|IOI |
+----+
Точніше кажучи, порожній перетин є частиною території гравця, якщо всі його сусіди - це або камені цього гравця, або порожні перетини, які належать до території цього гравця.
Докладніше можна дізнатися у Вікіпедії або в Sensei's Library.
Щоб виконати цю вправу, потрібно реалізувати такі функції:
territories повертає координати точок у кожній території (з відліком від 1, верхній лівий кут має координати (1,1)) разом із тим, кому «належить» ця територія.
territoriesFor повертає територію, яка містить цю координату, разом із власником території. Якщо координата не вказує на порожню точку, повертається Nothing.
Територія належить гравцеві, якщо лише його камені межують із цією територією.
Сигнатури типів уже на місці, тож лишається визначити самі функції.