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

Do you need help?

HW4 obbligatorio - un aiuto per ragionare.

S
SimoBATT (460 points)
2 5 8
in HW4 obbligatorio by (460 points)
reopened by
Non riesco a capire come dovremmo fare a trovare la parola che stiamo cercando (con quella data lunghezza e che si ripeta una volta sola).

Qualcuno sa darmi uno spunto da cui partire a ragionare? Spero di essermi spiegato bene.
694 views

5 Answers

AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
Dopo aver composto tutte le parole presenti nel file (visto che alcune sono separate su più righe) un buon modo di iniziare è sicuramente quello di generare tutte le possibili sottostringhe della lunghezza data presenti nella prima parola per poi procedere sapendo che sicuramente la parola segreta è una tra queste sottostringhe (dato che deve essere presente una volta in ogni parola).
S
SimoBATT (460 points)
2 5 8
by (460 points)
Con .split() oppure in un altro modo?
AndreaGasparini (18850 points)
7 12 120
by (18.9k points)
edited by

Split serve per separare una stringa in base ad un delimitatore (ad esempio lo spazio), quindi in questo caso non vedo come possa essere utile. A seguire trovi la descrizione presente nella documentazione:

Return a list of the words in the string, using sep as the delimiter string.


sep
The delimiter according which to split the string. None (the default value) means split according to any whitespace, and discard empty strings from the result.

Non esiste un metodo built-in che ti risolva questo problema, ma con i dati che hai (lunghezza che devono avere le sottostringhe e parola da cui estrarle) non è difficile riuscire a generarle tutte. Collegandomi all'esempio della traccia, stiamo parlando di tutte le sottostringhe di lunghezza 3 presenti nella parola "moneta", ovvero:

  • 'mon'
  • 'one'
  • 'net'
  • 'eta'

EDIT: se invece intendevi utilizzare .split() per comporre le parole presenti nel file, allora potrebbe essere utile, ma dipende dall'approccio che utilizzi.

E
Edward (25950 points)
3 4 172
by (26.0k points)
Praticamente la parola da cercare è l'unica che è presente in tutte le stringhe, ha quella lunghezza, e si ripete una volta sola.

Quindi dovresti trovare un modo di contare quante volte le sottostringhe di quella lunghezza si ripetono all'interno di una stringa (magari con un dizionario), e vedere quale di queste è presente in tutte le sottostringhe, e si ripete una sola volta.
g
gian.uni (1510 points)
4 6 11
by (1.5k points)
Tu pensa al fatto che se una parola è spezzata avrà come successiva un'altra parola spezzata,altrimenti se è una parola intera avrà come successivo il carattere d'accapo('\n').

Fatto questo poi si tratta solo di confrontare tutte le sottostringhe con le parole trovate e trovare quella comune a tutte.

Da lì devi solo trovare gli indici ed è facile.
a
andreaamici (1740 points)
11 12 21
by (1.7k points)
Tu sai che la parola ha lunghezza data,inoltre sai che si trova per certo anche nella prima parola...potresti usare un metodo di slicing per 'spezzettare' questa parola (in tutti i modi possibili ) in parole di lunghezza M e poi confrontarla con il resto delle parole..
Tommaso Sgroi (12990 points)
10 11 91
by (13.0k points)

La parola nascosta sarà all'interno di ogni stringa, separata da spazio, UNA SOLA VOLTA PER STRINGA.

Nell'esempio del professore infatti, per le 6 stringhe con parola nascosta di lunghezza 3:
    
    moneta
    maratoneta
    pitone
    onesto
    storione
    sonetto
    
    la parola nascosta è 'one' e le posizioni sono nell'ordine: 1, 5, 3, 0, 5, 1

Questo vuol dire che cercando in ogni stringa tutte le sottostringhe di lunghezza 3, 'one' apparirà SOLO 1 volta in ogni stringa. Dopodiché dovrai ritornale la lista delle posizioni di 'one' all'interno delle tue stringhe.

Sapendo questo, se ti generassi tutte le possibili sottostringhe nella prima parola e le andassi a confrontare con le altre, noterai come solo 'one' venga ripetuta nella prima e nelle altre sottostringhe. Questo vuol dire che è inutile andare a cercare tutte le possibili sottostringhe in tutte le stringhe, bensì dovrai andare a cercare, confrontando, le possibili sottostringhe nelle altre parole tramite le sottostringhe della prima parola!

Per fare un esempio la stringa 'onesto' : one, nes, est, sto     

Se guardi la stringa successiva 'storione' sarà composta da: sto, tor, ori, rio, ion, one                                                                                                                                                                             Quindi andando a guardare nella seconda parola vedrai che alcune sottostringhe si ripetono  così saprai quali sono le possibili sottostringhe da cercare.  Ora allora dovrai andare a vedere nelle altre parole quali sono ripetute tra quelle. 

Spero di averti dato qualche spunto o qualcosa su cui pensare.