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

Do you need help?

ho fatto una cosa regolare e possibile?

Light (5130 points)
55 181 229
in Es1 by (5.1k points)
nel mio codice dopo aver diviso matrice da lista parole ho fatto un "triplo for" in cui prima vedo le righe della matrice; poi vedo i caratteri delle matrici e dopo vedo le varie parole nella lista parole, perche cosi facendo posso vedere se quel carattere che sto vedendo è uguale al primo carattere di una parola in lista parole, e poi da qui chiamo le funzioni senno continuo a scorrere le parole della lista o i caratteri di una riga o addirittura le righe della matrice...la domanda è ci sta un modo migliore per scorrere come faccio io la matrice caratteri e le parole oppure come lo sto facendo è in linguaggio python è sbagliato sbagliato? ps. sto lavorando con gli indici proprio come mi era stato suggerito qua
558 views
closed

3 Answers

Best answer
d
davide.scrimieri (2930 points)
4 16 39
by (2.9k points)
selected by
In linea di principio nessun linguaggio moderno ti impedirà mai di portare a termine il tuo algoritmo.

Se però vedi che sei troppo bloccato, dopo uno o due giorni, io personalmente cercherei di pensare a qualche alternativa.

Ci sono altre logiche che potrei seguire per raggiungere il risultato?

Questo primo esercizio del secondo homework non  è proprio semplicissimo, se trovi delle difficoltà non ti abbattere. L'importante è che tu non ti arrenda.
Light (5130 points)
55 181 229
by (5.1k points)
nono non sono bloccato! anzi devo solo sistemare alcune cose (tipo come cancellare le varie parole dalla matrice e prendere il risultato) perche ho gia fatto le funzioni orizzontali  ecc volevo sapere pero che se si poteva fare un triplo for come avevo fatto io perche di solito ne facevo due e mai tre!
d
davide.scrimieri (2930 points)
4 16 39
by (2.9k points)
Certo che si può fare. Perché no? per ora come ho detto, almeno in prima battuta, mi concentrerei sul passare tutti i test dando la risposta corretta, poi ai tempi di esecuzione ci penso dopo.

La parte che ti è rimasta è onestamente la più facile di tutte. Se ti sei preso le coordinate delle parole che hai trovato, ti prendi solo le lettere che NON hanno quelle coordinate ed hai il risultato.
Light (5130 points)
55 181 229
by (5.1k points)
sisi ci avevo pensato ma mi si è presentato un bel problema facendo cosi sai? perche io ho una matrice che è una lista di stringhe; ed ho un insieme in cui ho tutti i punti che devo togliere dalla matrice (sono coppie righe colonne) ma non so come fare a levarle perche non posso modificare una stringa facendo tipo "apposto di coordinate riga colonna metti niente" sarebbe troppo facile...mi sto cervellando ma non so ancora bene che cosa fare per togliere le lettere che ho trovato
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
beh allora sei a buon punto… hai un set con le coordinate da togliere… immagino che non avrai difficoltà a creare un altro set con tutte le coordinate della matrice iterandola una sola volta completamente… una volta che l'hai creata evidenzi gli elementi non comuni e hai la soluzione ;-)
Xriuk (13590 points)
6 24 116
by (13.6k points)

@Light ti consiglio di cambiare tipo di matrice, invece di utilizzare una lista di stringhe (che non puoi modificare), prova ad utilizzare una lista di liste di caratteri.

Spezza le stringhe in liste, così facendo le puoi pure modificare. Ti basta fare list(stringa)

a
alex_err (5800 points)
1 3 32
by (5.8k points)

Quando si tratta di matrici, il doppio for è quasi necessario. Non vedo il problema di un triplo for, basta non appesantire troppo e non richiamare funzioni troppo esose in termini di risorse nel ciclo più interno. Certo, potresti optare per qualcosa più efficiente anziché fare un controllo sui singoli caratteri. Io ti suggerisco l'inverso: pensa a come puoi controllare direttamente se una parola si trova su una riga, una colonna o in diagonale devil 

Auron (15880 points)
50 126 194
by (15.9k points)

Ti sembrerà sicuramente una risposta quasi "pre-cotta", ma ti garantisco che è la sacrosanta verità... Il problema sostanziale, nella programmazione, è spesso il modo in cui è costruito l'algoritmo...
E' naturale che ci siano metodi, librerie, strumenti che agevolino certi tipi di "mansioni", ma in loro assenza un algoritmo ben progettato fa sempre il suo buon lavoro...
Tu ti chiedi se un triplo For si possa fare... Io ti rispondo che sono arrivato al Triplo For, mi sono chiesto se il programma non sarebbe risultato troppo lento, ma avevo un'idea che mi sembrava ben congegnata... Quindi ho continuato e, Meraviglia delle Meraviglie......... 4 For Annidati, un mio record personale immagino... Tempo di esecuzione TOTALE, circa 0.4s per tutti i test...
Soluzione? ---> In questo caso le condizioni di uscita (break/next) dei Cicli la fanno da padrone...
Pensavo che per l'ultimo test ci sarebbe voluto ALMENO 1 minuto con una struttura simile, invece a quanto pare l'idea era buona e tutto gira alla velocità della luce :D

Quindi il succo è... Pensaci sempre quando metti un ciclo, quello è di base, soprattutto se le iterazioni da compiere sono molte... Ma non farti spaventare dal loro utilizzo, in particolar modo se, come in questo caso, ci sono molte condizioni di uscita che si possono inserire per abbattere in maniera eccezionale il numero delle interazione ;)

Buona fortuna :)

P.s. Accetta il consiglio di @Xriuk sulla Lista di Liste di caratteri, è un ottimo punto di partenza (lo stesso su cui ho lavorato io)... Una struttura di questo tipo [['auwjsience'],['jdusjemsor'],....,['usjekdocps']]