Prazo de entrega:
Segunda chance:
Esta tarefa tem peso 4.
Você deve conhecer e utilizar conceitos de hashing e hash table. Além disso, você deve utilizar tipos de dados primitivos e tipos de dados compostos, como strings.
Ana está prestes a defender o seu mestrado e está correndo contra o tempo para entregar a versão final de sua dissertação. Como ela tem virado a noite escrevendo e muitas vezes dormido mal, Anna acaba cometendo vários erros de digitação durante a escrita do texto.
Anne precisa da sua ajuda para corrigir os erros de digitação, que podem ser esquecer de digitar um caractere, inserir um caractere a mais, ou digitar um caractere trocado.
Sua tarefa é fazer um programa em C com nome corretor
que, dada uma lista de
palavras que correspondem a um dicionário, indica o nível de correção de cada
palavra do texto. Os níveis são:
-
verde: a palavra está correta, isso é, está no dicionário;
-
amarelo: a palavra possui exatamente um erro de digitação, isso é, corresponde a um único erro de digitação de alguma palavra no dicionário;
-
vermelho: quando a palavra possui pelo menos dois erros de digitação.
Entrada
A entrada é composta por várias linhas. A primeira linha contém dois inteiros $m$ e $n$ que indicam, respectivamente, o número de palavras no dicionário e o número de palavras do texto. Em seguida são dadas $m$ palavras que compõem o dicionário e $n$ linhas com as palavras que devem ser buscadas.
Você pode supor que $5 \le m \le 100$ e $3 \le n \le 100$. Além disso, suponha que todos os caracteres são minúsculos e que as palavras possuem no máximo 25 caracteres e não possuem acentos ou caracteres especiais.
5 3
algoritmos
demonstracao
linear
inteira
exato
algoritmoss
intiera
linear
Saída
A saída do seu programa deverá apresentar $n$ linhas indicando o nível de correção de cada palavra buscada, conforme o exemplo:
algoritmoss: amarelo
intiera: vermelho
linear: verde
Observe que a palavra intiera
possui dois caracteres trocados, i
por e
e e
por i
.
Critérios
É obrigatório o uso de tabela de hashing para resolver esta tarefa eficientemente.