Esercizio
Si consideri un formato di rappresentazione testuale di un diagramma scacchistico nel quale gli scacchi liberi sono contrassegnati attraverso il carattere '.' e i vari pezzi secondo le lettere del seguente schema:
k re
q regina
r torre
b alfiere
n cavallo
p pedone
tali lettere sono maiuscole per i bianchi e minuscole per i neri.
I pedoni bianchi muovono dal basso verso l'alto.
Scrivere un programma che legga da riga di comando il nome di un file che conterrà (in otto righe di otto caratteri) una scacchiera secondo la rappresentazione sopra definita e determini se il re bianco o il re nero siano sotto scacco.
Il programma dovrà opportunamente controllare che il file esista e che sia nel formato corretto.
Per verificare se un pezzo è sotto scacco basta controllare se è in una posizione minacciata da un pezzo avversario. A tal fine basta ricordare che:
il re minaccia tutti gli scacchi che lo circondano;
la regina minaccia tutta la riga e la colonna dello scacco nel quale si trova più le due diagonali che attraversano tale scacco, la minaccia si diparte dalla regina e termina o a bordo scacchiera o al primo pezzo incontrato;
la torre minaccia tutta la riga e la colonna dello scacco nel quale si trova, la minaccia si diparte dalla torre e termina o a bordo scacchiera o al primo pezzo incontrato;
l'alfiere minaccia le due diagonali che attraversano lo scacco nel quale si trova, la minaccia si diparte dall'alfiere e termina o a bordo scacchiera o al primo pezzo incontrato;
il cavallo minaccia le otto caselle che, siano (X, Y) le coordinate del cavallo, sono alle coordinate (X-1,Y-2), (X+1, Y-2), (X-1, Y+2), (X+1, Y+2), (X-2, Y-1), (X-2, Y+1), (X+2, Y-1), (X+2, Y+1), sempre ammesso che tali caselle siano interne alla scacchiera;
il pedone minaccia le due caselle in diagonale che si trovano di fronte a lui (il pedone muove dal proprio schieramento verso lo schieramento avversario).
Esempio
Se il file contiene:
n.......
.....B..
R.....k.
....NP..
.K......
........
q.rr..R.
........
Il programma dovrà dare in output:
Il re bianco non è sotto scacco
Il re nero è sotto scacco