Un metodo che mi era venuto in mente per esempio è questo
CGQAB
SAOQD
FFNBA
ASFEA
Se noti in diagonale c'è la parola 'CANE' partendo da 0,0
La mia idea era quello di inserire tutto in una stringa diretta, quindi veniva:
CGQABSAOQDFFNBAASFEA
Se parti dalla posizione 1 hai C, ora tu sapendo la lunghezza delle righe (in questo caso 5) se sommi 1 a questa lunghezza (quindi 6) e passi di 6 in ti trovi la diagonale rispetto alla posizione 0
Infatti:
CGQABSAOQDFFNBAASFEA
Posizione 0 : C, Posizione 6: A, Posizione 12: N, Posizione 18: E.
Per la diagonale Su verso sinistra procedi di -6, mentre se vuoi calcolare la diagonale sotto a sinistra prendi la lunghezza (5) e ci levi 1 passando di 4 in 4.. e così via
Potresti definire una funzione che partendo da una posizione X calcoli le diagonali, è ovvio che da una posizione ti conviene avanzare di X in X per TOT volte a seconda della lunghezza della parola che cerchi. Ci sono comunque alcuni problemi dell'algoritmo per esempio che potresti incontrare diagonali già controllate, diciamo che è possibile risolvere a tutti i problemi ma devi elaborare un po' di più le situazioni.
Non so quale metodo sia migliore a livello di efficienza, perché è un metodo che ancora non ho testato ma che proverò sicuramente.