Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Hw 2 Es 1 Dubbi diagonali

V
Vic999 (750 points)
2 19 23
in Es1 by (750 points)
recategorized by
Salve ho un dubbio riguardante le parole nelle diagonali: Poichè stò lavorando con una matrice, mi sorgono dubbi nel come poter cercare le parole appunto in diagonale.
Mi conviene dover per forza contare ogni singola lettera, oppure c'è un modo migliore per risolvere questo problema? (Non sò se c'è già una domanda del genere, ma sul forum non ho trovato nulla)

4 Answers

Shunk (6140 points)
6 26 86
by (6.1k points)
Io ho contato ogni singola lettera incrementando l'indice in verticale e orizzontale, però sicuramente c'è un modo più pratico
V
Vic999 (750 points)
2 19 23
by (750 points)
Ok, per ora faccio con il metodo "Macchinoso"
marco.giuliani (23860 points)
2 13 62
by (23.9k points)
Devi riuscire a trovare un modo per fare solamente le diagonali di lunghezza utile (quindi non quelle da una, due o tre lettere). Prova a fare operazioni con l'altezza e la lunghezza del diagramma
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Ci sono parole da 3 lettere
d
davide.scrimieri (2930 points)
4 16 39
by (2.9k points)
Io personalmente non guardo carattere per carattere, ma mi faccio tutta la stringa di ogni diagonale, e verifico se contiene le parole  (o i loro inversi). E' un pò più lento della media ma mi va bene. Nel weekend cercherò di ottimizzare il codice, ma l'obiettivo mio iniziale era quello di passare i test e farlo nei tempi previsit di timeout
d
doviscarcelli (920 points)
1 2 6
by (920 points)
In che modo riesci a trovare la stringa di ogni diagonale?
f
francesco.aquino (1340 points)
1 4 10
by (1.3k points)
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.
Xriuk (13590 points)
6 24 116
by (13.6k points)

Scusa, ma il tuo procedimento è uguale a quello di usare due coordinate, tu aggiungi alla X la lunghezza della tua riga +1 che è uguale a dire aggiungo alla Y 1 (avanzo di una riga) e aggiungo alla X 1, il risultato non cambia, semplicemente tu stai usando una sola lista invece di una matrice...

f
francesco.aquino (1340 points)
1 4 10
by (1.3k points)
Il ragionamento è comunque diverso, da una parte viene incrementato ogni volta Y mentre dall'altra passo per i multipli di LEN+1. In ogni caso il risultato è uguale