Ti viene data una posizione sul tabellone per una partita Go e una mossa per giocare. È necessario indicare se la mossa è legale o meno e la nuova posizione del consiglio se è legale.
Una breve spiegazione delle mosse di Go: il gioco consiste nel posizionare alternativamente pezzi bianchi e neri ("pietre") in posti vuoti su una tavola quadrata. Set di pezzi dello stesso colore che sono collegati tra loro (4 vie) sono chiamati gruppi. I posti vuoti sul tabellone che sono adiacenti a un gruppo (anche a 4 vie) sono considerati le "libertà" di quel gruppo. Viene catturato un gruppo con 0 libertà (rimosso dal tabellone). Una mossa che provocherebbe la cattura del proprio gruppo ("suicidio") è illegale, a meno che non stia catturando uno o più gruppi avversari (guadagnando libertà nel processo in modo che non sia effettivamente catturato).
Per gli interessati, non è necessario affrontare ko (e superko), ovvero è possibile ritenere che una cattura ko sia legale. Se non sai cosa significa, segui le regole sopra e andrà bene.
Input: un numero n compreso tra 2 e 19 (incluso) che rappresenta la dimensione della scacchiera, seguito da n righe di n numeri tra 0 e 2 (incluso) che rappresenta la posizione della scacchiera, seguito da 3 numeri separati da spazio, che rappresentano la mossa da effettuare. Nella posizione del tabellone, 0 significa posto vuoto, 1 significa pietra nera e 2 significa pietra bianca. La mossa fornisce la colonna, la riga e il colore (1 o 2) della pietra da posizionare. La colonna e la riga sono basate su 0, vanno da 0 a n-1 (incluso) e contano nello stesso ordine dell'input della scheda.
Puoi presumere che la posizione del consiglio di amministrazione sia legale (tutti i gruppi hanno almeno una libertà).
Output: una riga contenente 1 o 0 (o true / false se si preferisce) se la mossa è legale o meno, seguita (solo in caso di mossa legale) dalla nuova posizione della scacchiera nello stesso formato dell'input.
Punteggio: numero di byte del codice sorgente completo, più piccolo è meglio. 20% di penalità aggiuntiva per l'uso di caratteri non ascii e 20% di penalità aggiuntiva se il codice non può essere testato in Linux utilizzando software disponibile gratuitamente.
Regole: nessuna connessione di rete e nessuna libreria di terze parti. Il programma dovrebbe utilizzare i flussi di input e output standard o l'equivalente standard per il linguaggio di programmazione.
Esempi:
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