Exercice: count_island
Le programme prend en parametre un fichier contenant une serie de lignes de longueurs egales contenant soit le caractere '.' soit le caractere 'X'. Ces lignes forment un rectangle de '.' comportant des ilots de 'X'. Une ligne est une suite de caracteres '.' et de caracteres 'X' qui se termine par un '\n'. Les lignes font toutes la meme taille. La taille maximum d'une ligne est 1024 caracteres. Une colonne de caracteres est formee par l'ensemble des caracteres dans un fichier qui sont separes par le meme nombre de caracteres du debut de leur ligne respective. On dit que deux caracteres se touchent s'ils sont :
- soit sur la meme ligne et contigus.
- soit sur la meme colone et sur des lignes contigues. Un ilot de 'X' est forme par l'ensemble des caracteres qui se touchent. Le programme doit parcourir le fichier ligne par ligne et l'afficher a l'ecran en remplacant tous les 'X' des ilots par leur numero d'apparition dans le fichier. Le programme devra effectue ce traitement en commancant par le debut du fichier. Il ne peut pas y avoir deux resultats differents pour un meme fichier. Si le fichier est vide, qu'une erreur s'est produite ou que aucun fichier n'est passe en parametre, le programme ecrit simplement le caractere '\n' sur sa sortie standard. Le fichier comporte au maximum 10 ilots. Vous trouverez dans le repertoire misc des exemples de fichier.
Exemple 1: Voici le contenu du fichier "toto".
.................XXXXXXXX.......................................... ....................XXXXXXXXX.......XXXXXXXX....................... .................XXXXXXXX..............XXX...XXXXX................. .....................XXXXXX.....X...XXXXXXXXXXX.................... ................................X.................................. ......XXXXXXXXXXXXX.............X.................................. ..................X.............XXXXXXXXX.......................... ..................X.........XXXXXXXXXXXX........................... ..................X................................................ XX.............................................................XXXX XX..................XXXXXXXXXXXXX.................................X ................................................................... .................................................................X. .....................XXXXX.......................................XX
(login@host)./count_island toto .................00000000.......................................... ....................000000000.......11111111....................... .................00000000..............111...11111................. .....................000000.....2...11111111111.................... ................................2.................................. ......3333333333333.............2.................................. ..................3.............222222222.......................... ..................3.........222222222222........................... ..................3................................................ 44.............................................................5555 44..................6666666666666.................................5 ................................................................... .................................................................7. .....................88888.......................................77 (login@host)
Exemple 2: Voici le contenu du fichier "flop_aime".
................................................................... ...X........X.....XXXXX......XXXXXXX...XXXXXXXXXX..XXXXXXXXXX...... ...XX......XX....XX...XX....XX.....XX.....XXXX.....XXXXXXXXXX...... ...XXXX..XXXX...XX.....XX...XX.....XX......XX......XX.............. ...XX.XXXX.XX...XX.....XX...XX.....XX......XX......XX.............. ...XX...X..XX...XX.....XX...XXXXXXXX.......XX......XXXXX........... ...XX......XX...XXXXXXXXX...XXXX...........XX......XXXXX........... ...XX......XX..XX.......XX..XX.XX..........XX......XX.............. ...XX......XX..XX.......XX..XX...X.........XX......XX.............. ...XX......XX..XX.......XX..XX....X......XXXXXX....XXXXXXXXXX...... ...XX......XX.XX.........XX.XX.....XX..XXXXXXXXXX..XXXXXXXXXX..X... ...................................................................
(login@host)./count_island flop_aime ................................................................... ...0........0.....11111......2222222...3333333333..4444444444...... ...00......00....11...11....22.....22.....3333.....4444444444...... ...0000..0000...11.....11...22.....22......33......44.............. ...00.0000.00...11.....11...22.....22......33......44.............. ...00...0..00...11.....11...22222222.......33......44444........... ...00......00...111111111...2222...........33......44444........... ...00......00..11.......11..22.22..........33......44.............. ...00......00..11.......11..22...5.........33......44.............. ...00......00..11.......11..22....6......333333....4444444444...... ...00......00.11.........11.22.....77..3333333333..4444444444..8... ................................................................... (login@host)
Exemple 3: Voici le contenu du fichier "titi"
..X....... ...X.X.... ....XX.XX. .X..XX.... .X..X...X.
(login@host)./count_island titi | cat -e ..0.......$ ...1.2....$ ....22.33.$ .4..22....$ .4..2...5.$ (login@host)
Exemple 4: (login@host)./count_island | cat -e $ (login@host)
------------------- ******** -------------------