Problem
1. Questa domanda comporta un ragionamento su stringhe composte da lettere maiuscole. Implementerai due metodi correlati che compaiono nella stessa classe (non mostrati). Il primo metodo accetta un singolo parametro di stringa e restituisce una versione criptata di quella stringa. Il secondo metodo prende un elenco di stringhe e modifica l'elenco rimescolando ogni voce nell'elenco. Qualsiasi voce che non può essere codificata viene rimossa dall'elenco.
a) Scrivi il metodo scrambleWord, che prende una data parola e restituisce una stringa che contiene una versione criptata della parola secondo le seguenti regole.
- Il processo di scrambling inizia dalla prima lettera della parola e continua da sinistra a destra.
- Se due lettere consecutive sono costituite da una "A" seguito da una lettera che non è una "A", allora le due lettere vengono scambiate nella stringa risultante.
- Una volta che le lettere in due posizioni adiacenti sono state scambiate, nessuna di queste due posizioni può essere coinvolta in uno scambio futuro.
La tabella seguente mostra diversi esempi di parole e le loro versioni criptate.
parola |
Risultato restituito da scrambleWord(parola) |
"TAN" |
"TNA" |
"ABRACADABRA" |
"BARCADABARA" |
"WHOA" |
"WHOA" |
"AARDVARK" |
"ARADVRAK" |
"UOVA" |
"UOVA" |
"A" |
"A" |
"" |
"" |
Metodo completo scrambleWord di seguito.
/** Codifica una data parola.
* @param word la parola da codificare
* @return la parola criptata (possibilmente uguale a parola)
* Prerequisito: la parola è una stringa vuota o contiene solo lettere maiuscole.
* Postcondizione: la stringa restituita è stata creata da word come segue:
* - la parola è stata criptata, iniziando dalla prima lettera e proseguendo da sinistra a destra
* - due lettere consecutive costituite da "A" seguita da una lettera che non era "A" sono stati scambiati
* - le lettere sono state scambiate al massimo una volta
*/
public static String scrambleWord(String parola)
b) Scrivete il metodo scrambleOrRemove, che sostituisce ogni parola nel parametro wordList con la sua versione criptata e rimuove tutte le parole che sono rimaste invariate dopo la codifica. L'ordine relativo delle voci in wordList rimane lo stesso di prima della chiamata a scrambleOrRemove.
L'esempio seguente mostra come il contenuto di wordList verrebbe modificato come risultato della chiamata a scrambleOrRemove.
Prima della chiamata a scrambleOrRemove:
elenco di parole
0 |
1 |
2 |
3 |
4 |
"TAN" |
"ABRACADABRA" |
"WHOA" |
"MELA" |
"UOVA" |
Dopo la chiamata a scrambleOrRemove:
elenco di parole
0 |
1 |
2 |
"TAN" |
"BARCADABARA" |
"PAPLE" |