Esercizio 1

Si scriva un programma che accetti in input da linea di comando il nome di un file di testo reppresentate un labirinto e visualizzi in output la struttura del labirinto come insieme di

corridoi orizzontali e verticali.

Il file di input è composto da una sequenza di righe di uguale lunghezza. Ogni riga contiene i caratteri . e X a reppresentare, rispettivamente, uno spazio percorribile o un muro.

Un esempio di file di input è il seguente:

 

X.XXXXXXXX

X.X......X

X.X.XXX..X

X.X.XXX..X

X.X.X....X

X...XXX..X

XXXXX.XX.X

X..XXX...X

XXXXXXX.XX

L'output del programma dovrà essere composto da una sequenza di linee aventi il seguente formato:

X,Y,D,L

dove X e Y sono le coordinate del punto iniziale del corridoio nel labirinto (si assuma che il punto in alto a sinistra abbia coordinata 0,0), D è o la lettere O o la lettera V per indicare che il corridoio si estende, rispettivamente, in orizzontale o in verticale, e L è il numero di spazi percorribili di cui il corridoio è formato. Nel caso di un corridoio formato da un solo spazio percorribile L sarà 1 e D può essere indifferentemente O o V .

Si noti che spesso un tratto percorribile appartiene a più corridoi diversi (avviene per tutte le intersezioni); in questo caso il programma può assumere indifferentemente che il tratto appartenga ad un corridoio piuttosto che all'altro, ma anche a tutti e due.

Nel caso in cui il programma usi come input il file dell'esempio precedente un possibile output può essere (notare che l'ordine dei corridoi può anche essere diverso):

1,0,V,6

3,1,V,5

4,1,O,5

7,2,V,4

8,2,V,6

5,4,O,2

2,5,O,1

5,6,O,1

1,7,O,2

6,7,O,2

7,8,O,1

Esercizio 2

Si scriva un programma che accetti in input da linea di comando il nome di un file di testo e restituisca in output il numero di linee fra loro differenti contenute nel file specificato.

Per questo esercizio non è possibile utilizzare le collezioni contenute nel package java.util .