Te dan una posición en el tablero para un juego de Go y un movimiento para jugar. Debe indicar si el movimiento es legal o no, y la nueva posición del tablero si es legal.
Una breve explicación de los movimientos de Go: el juego consiste en colocar alternativamente piezas en blanco y negro ("piedras") en lugares vacíos en un tablero cuadrado. Los conjuntos de piezas del mismo color que están conectados entre sí (4 vías) se denominan grupos. Los lugares vacíos en el tablero adyacentes a un grupo (también de 4 vías) se consideran las "libertades" de ese grupo. Se captura un grupo con 0 libertades (se elimina del tablero). Un movimiento que haría que su propio grupo fuera capturado ("suicidio") es ilegal, a menos que esté capturando a uno o más grupos del oponente (obteniendo libertades en el proceso para que no sea capturado).
Para los interesados, no es necesario tratar con ko (y superko), es decir, puede asumir que una captura de ko es legal. Si no sabe lo que eso significa, simplemente siga las reglas anteriores y estará bien.
Entrada: un número n entre 2 y 19 (inclusive) que representa el tamaño del tablero, seguido de n líneas de n números entre 0 y 2 (inclusive) que representan la posición del tablero, seguido de 3 números separados por espacio, que representan el movimiento a realizar. En la posición del tablero, 0 significa lugar vacío, 1 significa piedra negra y 2 significa piedra blanca. El movimiento le da a la columna, la fila y el color (1 o 2) de la piedra para colocar. La columna y la fila están basadas en 0, que van de 0 a n-1 (inclusive) y se cuentan en el mismo orden que la entrada de la placa.
Puede suponer que la posición de la junta dada es legal (todos los grupos tienen al menos una libertad).
Salida: una línea que contiene 1 o 0 (o verdadero / falso si lo prefiere) si el movimiento es legal o no, seguido (solo en caso de un movimiento legal) por la nueva posición del tablero en el mismo formato que la entrada.
Puntuación: Número de bytes del código fuente completo, más pequeño es mejor. 20% de penalización adicional por el uso de caracteres no ASCII, y 20% de penalización adicional si su código no puede ser probado en Linux utilizando software disponible gratuitamente.
Reglas: sin conexiones de red y sin bibliotecas de terceros. Su programa debe usar los flujos de entrada y salida estándar, o el equivalente estándar para su lenguaje de programación.
Ejemplos:
1) Input:
2
10
01
1 0 2
Output:
0
2) Input:
2
10
11
1 0 2
Output:
1
02
00
3) Input:
5
22122
22021
11211
02120
00120
2 1 1
Output:
1
00100
00101
11011
02120
00120
4) Input:
6
000000
011221
121121
122221
011110
000000
4 0 1
Output:
1
000010
011221
121121
122221
011110
000000