Rutas
/
Haskell
Haskell
/
Ejercicios
/
Recuento de Go
Recuento de Go

Recuento de Go

Difícil

Instrucciones

Cuenta los puntos anotados en un tablero de Go.

En el juego del Go (también conocido como baduk, igo, cờ vây y wéiqí) se ganan puntos al rodear por completo intersecciones vacías con tus piedras. Las intersecciones rodeadas de un jugador se conocen como su territorio.

Calcula el territorio de cada jugador. Puedes suponer que las piedras que hayan quedado atrapadas en territorio enemigo ya se han retirado del tablero.

Determina el territorio que incluye una coordenada especificada.

Se pueden rodear varias intersecciones vacías a la vez y, para rodear, solo cuentan los vecinos horizontales y verticales. En el siguiente diagrama, las piedras que importan están marcadas con «O» y las que no, con «I» (ignoradas). Los espacios vacíos representan intersecciones vacías.

+----+
|IOOI|
|O  O|
|O OI|
|IOI |
+----+

Para ser más precisos, una intersección vacía forma parte del territorio de un jugador si todos sus vecinos son piedras de ese jugador o intersecciones vacías que forman parte del territorio de ese jugador.

Para más información, consulta Wikipedia o Sensei's Library.

Pistas

Para completar este ejercicio, tienes que implementar las siguientes funciones:

  • territories devuelve las coordenadas (con base 1, la de arriba a la izquierda es (1,1)) de los puntos de cada territorio, junto con quién «posee» el territorio.

  • territoriesFor devuelve el territorio que contiene la coordenada, junto con el propietario del territorio. Si la coordenada no apunta a una posición vacía, devuelve Nothing.

Un territorio es propiedad de uno de los jugadores si las piedras de ese jugador son las únicas piedras adyacentes al territorio.

Las firmas de tipo ya están puestas, pero definir las funciones depende de ti.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Haskell Exercism

¿Listo para empezar Recuento de Go?

Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.