Module: AP CIÊNCIA DA COMPUTAÇÃO SEÇÃO II 2014


Problem

1/3

AP Computer Science A 2014 Free-Response Question - scrambleWord

Problem

1. Esta questão envolve raciocínio sobre strings compostas por letras maiúsculas. Você implementará dois métodos relacionados que aparecem na mesma classe (não mostrados). O primeiro método usa um único parâmetro de string e retorna uma versão embaralhada dessa string. O segundo método pega uma lista de strings e modifica a lista misturando cada entrada da lista. Qualquer entrada que não pode ser embaralhada é removida da lista. 
a) Escreva o método scrambleWord, que recebe uma determinada palavra e retorna uma string que contém uma versão embaralhada da palavra de acordo com as seguintes regras.
  • O processo de embaralhamento começa na primeira letra da palavra e continua da esquerda para a direita. 
  • Se duas letras consecutivas consistem em um "A" seguido por uma letra que não seja um "A", então as duas letras são trocadas na string resultante.
  • Depois que as letras em duas posições adjacentes forem trocadas, nenhuma dessas duas posições poderá ser envolvida em uma troca futura.
A tabela a seguir mostra vários exemplos de palavras e suas versões embaralhadas.
palavra Resultado retornado por scrambleWord(word)
"TANTO" "TNA"
"ABRACADABRA" "BARCADABARA"
"UAU" "UAU"
"AARDVARK" "ARADVRAK"
"OVOS" "OVOS"
"A" "A"
"" ""

Complete o método scrambleWord abaixo.

 /** Embaralha uma determinada palavra.
 * @param word a palavra a ser embaralhada
 * @return a palavra embaralhada (possivelmente igual a palavra)
 * Pré-condição: a palavra é uma string vazia ou contém apenas letras maiúsculas.
 * Pós-condição: a string retornada foi criada a partir da palavra da seguinte forma:
 * - a palavra foi embaralhada, começando na primeira letra e continuando da esquerda para a direita
 * - duas letras consecutivas consistindo de "A" seguido de uma letra que não era "A" foram trocados
 * - as letras foram trocadas no máximo uma vez
 */
 public estático String scrambleWord(String palavra)

b) Escreva o método scrambleOrRemove, que substitui cada palavra no parâmetro wordList por sua versão embaralhada e remove todas as palavras que não foram alteradas após a embaralhamento. A ordem relativa das entradas em wordList permanece a mesma de antes da chamada para scrambleOrRemove.
O exemplo a seguir mostra como o conteúdo de wordList seria modificado como resultado da chamada scrambleOrRemove.
Antes da chamada para scrambleOrRemove:

lista de palavras 
0 1 2 3 4
"TANTO" "ABRACADABRA" "WHOA" "APPLE" "OVOS"

Após a chamada para scrambleOrRemove:
lista de palavras
0 1 2
"TANTO" "BARCADABARA" "PAPLE"