On vous donne une position de plateau pour une partie de Go et un coup pour jouer. Vous devez indiquer si le mouvement est légal ou non, et la nouvelle position du conseil d'administration si elle est légale.
Une brève explication des mouvements de Go: le jeu consiste à placer alternativement des pièces noires et blanches ("pierres") dans des endroits vides sur un plateau carré. Les ensembles de pièces de la même couleur qui sont connectés les uns aux autres (4 voies) sont appelés groupes. Les espaces vides sur le tableau qui sont adjacents à un groupe (également à 4 voies) sont considérés comme les "libertés" de ce groupe. Un groupe avec 0 libertés est capturé (retiré du tableau). Un mouvement qui entraînerait la capture de son propre groupe ("suicide") est illégal, à moins qu'il ne capture un ou plusieurs groupes adverses (gagnant ainsi des libertés afin qu'il ne soit pas réellement capturé).
Pour les personnes concernées, vous n'avez pas besoin de traiter avec ko (et superko), c'est-à-dire que vous pouvez supposer qu'une capture de ko est légale. Si vous ne savez pas ce que cela signifie, suivez simplement les règles ci-dessus et tout ira bien.
Entrée: un nombre n compris entre 2 et 19 (inclus) représentant la taille de la carte, suivi de n lignes de n nombres compris entre 0 et 2 (inclus) représentant la position de la carte, suivis de 3 chiffres séparés par un espace, représentant le mouvement à effectuer. En position de plateau, 0 signifie place vide, 1 signifie pierre noire et 2 signifie pierre blanche. Le mouvement donne la colonne, la ligne et la couleur (1 ou 2) de la pierre à placer. La colonne et la ligne sont basées sur 0, allant de 0 à n-1 (inclus) et comptées dans le même ordre que l'entrée de la carte.
Vous pouvez supposer que le poste donné au conseil d'administration est légal (tous les groupes ont au moins une liberté).
Sortie: une ligne contenant 1 ou 0 (ou vrai / faux si vous préférez) si le mouvement est légal ou non, suivi (uniquement en cas de mouvement légal) par la nouvelle position du tableau dans le même format que l'entrée.
Score: Nombre d'octets du code source complet, plus petit est meilleur. 20% de pénalité supplémentaire pour l'utilisation de caractères non-ascii et 20% de pénalité supplémentaire si votre code ne peut pas être testé sous Linux à l'aide d'un logiciel disponible gratuitement.
Règles: Aucune connexion réseau et aucune bibliothèque tierce. Votre programme doit utiliser les flux d'entrée et de sortie standard, ou l'équivalent standard pour votre langage de programmation.
Exemples:
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