A palavra BANANA
aparece exatamente uma vez nesta pesquisa de palavras :
B A N A A N B B
A B A N A B A N
A N A B N N A A
N N B A A A N N
N A A N N N B A
A N N N B A N A
N A A B A N A N
B A N A N B B A
A busca da palavra acima contém apenas uma ocorrência da palavra BANANA
olhando para cima, baixo, esquerda, direita ou na diagonal, mas tem muitas palavras semelhantes, como BANANB
, BANNANA
, BNANA
, etc.
Seu trabalho é criar um programa que gere pesquisas de palavras irritantes como esta.
Seu programa terá como entrada:
Uma palavra, em todas as letras maiúsculas, contendo de três a sete letras únicas, com pelo menos quatro letras no total.
Um número, para representar a dimensão da grade quadrada da pesquisa de palavras. O número deve ser pelo menos o número de letras na palavra.
E, em seguida, produza uma pesquisa por palavra usando apenas as letras da palavra, que contém exatamente uma ocorrência da palavra de entrada e o maior número possível de enfurecedores .
Um enfurecedor é definido como uma sequência que tem uma distância Damerau-Levenshtein de uma da palavra de destino e começa com a mesma letra que a palavra. Pois BANANA
, isso incluiria palavras como:
BANBNA
, onde uma das letras foi substituída.BANNANA
ouBANAANA
, onde uma carta extra foi adicionada.BANAN
,,BNANA
onde uma carta foi excluída, mas nãoANANA
, pois não há mais aB
.BAANNA
ouBANAAN
, onde duas letras consecutivas foram trocadas.
Ao contar os enfurecedores em uma grade de pesquisa de palavras, eles podem se sobrepor, mas você não pode contar uma sequência grande se ela contiver completamente uma sequência menor que você já contou ou vice-versa. (Se você tiver BANANB
, não poderá contá-lo novamente se já tiver contado o BANAN
inverso ou o contrário BNANA
.) Você também não pode contar seqüências que contenham completamente ou sejam completamente contidas pela própria palavra de destino (não é possível contar a palavra específica BANAN
que faz parte BANANA
, nem BANANAA
ou BANANAN
.)
Seu programa será testado em uma lista de palavras específica composta pelas palavras que atendem ao requisito da palavra de entrada (a ser fornecida posteriormente depois que eu o gerar), em um tamanho de grade igual ao dobro do comprimento da palavra e será pontuada no número de enfurecedores presentes em cada grade. Por favor, postar seus resultados para as entradas BANANA 12
, ELEMENT 14
e ABRACADABRA 22
para verificação.
fonte
MURMURS
parece ser um bom caso de teste, desde que eu imagino uma resposta ideal envolveria deixando cair oS
Respostas:
Script Java
Bônus: você pode propagar a pesquisa do Word. A semente padrão é: "codechallenge"
BANANA - 12:
ELEMENTO - 14:
Boa sorte: ABRACADABRA - 22:
Extra: MISSISSIPPI - 32:
fonte
C ++
Eu escrevi este aqui hoje. Não é a maneira mais eficiente e nem sempre gera as pesquisas de palavras com aparência mais aleatória, mas faz o trabalho e o faz relativamente rápido.
Bônus: Também suporta Palindromes !!!
Ele funciona inserindo a palavra e o tamanho da pesquisa por palavra. Em seguida, gera furadores descartando letras, inserindo letras ou invertendo letras. Em seguida, os adiciona à grade e à palavra correta. Em seguida, verifica todas as instâncias da primeira letra em todas as direções da palavra. Se uma instância não for encontrada (2 para palíndromos), a força bruta forçará o ciclo. Em seguida, ele envia a pesquisa de palavras para o console e também para um arquivo.
Aqui estão 213 linhas de código com espaço em branco e comentários.
Como estou longe de ser um especialista em C ++, tenho certeza de que há lugares onde esse código pode ser aprimorado, mas fiquei feliz com a maneira como ele acabou.
Aqui estão as saídas.
Posso atualizar isso para gerar pesquisas de palavras com aparência um pouco mais "aleatória".
fonte
Excel VBA
Ele funciona primeiro colocando a palavra aleatoriamente na planilha, aleatoriamente na posição e na direção, e depois preenchendo os espaços não vazios na grade circundante, escolhendo aleatoriamente entre a última letra da palavra, exceto a última.
Saída BANANA (2, 1):
Saída ELEMENT (6, 5):
Saída ABRACADABRA (2, 3):
fonte