HW4 obbligatorio - un aiuto per ragionare.

S
SimoBATT (260 points)
1 3 5
asked Nov 13, 2019 in HW4 obbligatorio by SimoBATT (260 points)
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.
463 views

5 Answers

AndreaGasparini (18730 points)
6 11 118
answered Nov 13, 2019 by AndreaGasparini (18,730 points)
edited Nov 13, 2019 by AndreaGasparini
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 (260 points)
1 3 5
commented Nov 13, 2019 by SimoBATT (260 points)
Con .split() oppure in un altro modo?
AndreaGasparini (18730 points)
6 11 118
commented Nov 13, 2019 by AndreaGasparini (18,730 points)
edited Nov 13, 2019 by AndreaGasparini

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)
2 4 172
answered Nov 13, 2019 by Edward (25,950 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)
2 6 11
answered Nov 13, 2019 by gian.uni (1,510 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)
9 12 21
answered Nov 13, 2019 by andreaamici (1,740 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)
6 11 91
answered Nov 13, 2019 by Tommaso Sgroi (12,990 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.