Regole generali

Il tempo per portare a termine la prova è di tre ore.
La prova consta un unico esercizio, fare in modo che la classe principale (che contiene il main) dell'esercizio si chiami Esercizio.
Iniziare ogni file sorgente con un commento che contiene il cognome e il nome del candidato (nell'ordine e usando opportunamente maiuscole e minuscole) e il suo numero di matricola (Es: //Bianchi Mario 0000156786).

È permesso l'uso di fogli bianchi per appunti; non è permesso l'uso di alcun tipo di materiale di consultazione tranne la documentazione in linea accedibile attraverso l'ambiente preconfigurato (usando il plugin InfoViewer attivabile con il pulsante nel bordo destro).

La compilazione e l'esecuzione vanno effettuate usando il plugin Console (menu Plugins/Console/Compile Current Buffer... e Plugins/Console/Run Current Buffer...).

L'elaborato consegnato verrà corretto solo se compilabile senza errori; tutti i file sorgenti vanno salvati nella directory di default presentata da JEdit.

La modularizzazione (suddivisione in classi/metodi) e l'uso opportuno di commenti che rendano comprensibile l'elaborato sono parametri utilizzati in sede di valutazione. Anche nel caso di uso di più classi fare in modo di consegnare un unico sorgente (a tal fine si rammenta che un file sorgente può contentere un'unica classe pubblica ma può contenerne altre non pubbliche).

Esercizio: Hex

In un tavoliere romboidale suddiviso in caselle esagonali, due giocatori devono disporre le proprie pedine in modo da formare una linea continua (cioè una sequenza di celle adiacenti) tra i due lati opposti del proprio colore (ogni giocatore ha due lati del rombo, non contigui).

Scrivere un programma che accetti in input da riga di comando il nome di un file di testo e un carattere fra 'X' e 'O' (minuscole), per indicare il giocatore di turno, e visualizzi in output se nella rappresentazione del tavoliere contenuta nel file di testo il giocatore specificato ha vinto (cioè esiste una connessione di sue pedine fra i suoi due lati).
Il file di testo deve contenere una rappresentazione di un tavoliere (di 9 celle di lunghezza) con una partita in corso usando la seguente notazione:

   A B C D E F G H I
1 . . . . . . . . .
2 . . . . . . . . .
3 . . . . . . . . .
4 . . . . . . . . .
5 . . . . . . . . .
6 . . . . . . . . .
7 . . . . . . . . .
8 . . . . . . . . .
9 . . . . . . . . .

Dove il carattere '.' indica una cella libera. Nel caso le celle siano occupate, il carattere '.' sarà sostituito con 'X' o 'O'.
E' da notare come le celle adiacenti ad una cella in mezzo al tavoliere siano sei. Ad esempio la cella di coordinate B2 ha come celle adiacenti B1, C1, A2, C2, A3 e B3.
Si assuma che i lati diagonali appartengono al giocatore 'X' e quelli orizzontali al giocatore 'O'.
Il programma, se il giocatore di turno ha vinto, deve visualizzare in output le coordinate della sequenza di celle vincente.

Esempio.

Lanciando il programma con:

java Esercizio hex.txt x

dove hex.txt contiene:

   A B C D E F G H I
1 . . . . . x . . .
2 . . . . . .o. x .
3 . . x x x x x . .
4 . x o x . x o o .
5 x . o o o x . . .
6 . . . . . x x . .
7 . . x . . . x x .
8 . . x x o o . x x
9 . . . . . o o . .

il programma dovrà visualizzare:

x ha vinto con la sequenza A5, B4, C3, D3, E3, F3, F4, F5, F6, G6, G7, H7, H8, I8

Regole specifiche

Per essere corretto dal docente, il programma deve, come minimo, identificare correttamente dei percorsi all'interno del tavoliere.