Do you need any help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

Hw 2 Es 1 Dubbi diagonali

V
Vic999 (750 points)
0 19 23
asked Nov 15, 2018 in Es1 by Vic999 (750 points)
recategorized Nov 15, 2018 by Vic999
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)
1 26 86
answered Nov 15, 2018 by Shunk (6,140 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)
0 19 23
commented Nov 15, 2018 by Vic999 (750 points)
Ok, per ora faccio con il metodo "Macchinoso"
marco.giuliani (23860 points)
1 13 62
answered Nov 16, 2018 by marco.giuliani (23,860 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 (172780 points)
514 935 1789
commented Nov 21, 2018 by andrea.sterbini (172,780 points)
Ci sono parole da 3 lettere
d
davide.scrimieri (2930 points)
0 15 39
answered Nov 16, 2018 by davide.scrimieri (2,930 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)
0 2 6
commented Nov 21, 2018 by doviscarcelli (920 points)
In che modo riesci a trovare la stringa di ogni diagonale?
f
francesco.aquino (1340 points)
1 4 10
answered Nov 21, 2018 by francesco.aquino (1,340 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)
0 24 116
commented Nov 21, 2018 by Xriuk (13,590 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
commented Nov 21, 2018 by francesco.aquino (1,340 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