Le mot BANANA
apparaît exactement une fois dans cette recherche de mots :
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
La recherche de mot ci - dessus contient une seule occurrence du mot à la BANANA
recherche haut, en bas, à gauche, à droite ou en diagonale, mais il a beaucoup de mots semblables, comme BANANB
, BANNANA
, BNANA
, etc.
Votre travail consiste à créer un programme qui générera des recherches de mots exaspérantes comme celle-ci.
Votre programme prendra en entrée:
Un mot, en toutes lettres majuscules, contenant de trois à sept lettres uniques d'au moins quatre lettres.
Un nombre, pour représenter la dimension de la grille carrée pour la recherche par mot. Le nombre doit être au moins égal au nombre de lettres du mot.
Et ensuite, lancez une recherche par mot en utilisant uniquement les lettres du mot, contenant exactement une occurrence du mot en entrée et le plus grand nombre d’ infurateurs possible.
Un infuriateur est défini comme une chaîne ayant une distance de Damerau-Levenshtein du mot cible et commençant par la même lettre que le mot. Car BANANA
, cela inclurait des mots comme:
BANBNA
, où l’une des lettres a été substituée.BANNANA
ouBANAANA
, où une lettre supplémentaire a été ajoutée.BANAN
,,BNANA
où une lettre a été supprimée, mais pasANANA
, puisqu'il n'y a plus deB
.BAANNA
ouBANAAN
, où deux lettres consécutives ont été échangées.
Lors du comptage d'infurs dans une grille de recherche de mots, ils peuvent se chevaucher, mais vous ne pouvez pas compter une grande chaîne si elle contient complètement une chaîne plus petite que vous avez déjà comptée, ou inversement. (Si vous l’avez fait BANANB
, vous ne pourrez plus le compter si vous avez déjà compté le BANAN
ou l’arrière à l’ BNANA
intérieur de celui-ci.) Vous ne pouvez pas non plus compter les chaînes qui contiennent complètement ou qui sont complètement contenues par le mot cible lui-même BANAN
cela fait partie de BANANA
, ni BANANAA
ni BANANAN
.)
Votre programme sera testé sur une liste de mots spécifique composée des mots qui répondent aux exigences du mot d'entrée (à donner plus tard une fois que je l'ai généré), sur une grille de taille égale au double de la longueur du mot, et sera notée. sur le nombre d’infurateurs présents dans chaque grille. S'il vous plaît poster vos résultats pour les entrées BANANA 12
, ELEMENT 14
et ABRACADABRA 22
pour la vérification.
la source
MURMURS
semble être un bon cas de test, car j'imagine qu'une réponse optimale impliquerait de laisser tomber leS
Réponses:
Script Java
Bonus: Vous pouvez semer la recherche par mot. La valeur par défaut est: "codechallenge"
BANANE - 12:
ELEMENT - 14:
Bonne chance: ABRACADABRA
Extra: MISSISSIPPI - 32:
la source
C ++
J'ai écrit celui-ci aujourd'hui. Ce n'est pas le moyen le plus efficace et ne génère pas toujours les recherches de mots les plus aléatoires, mais il fait le travail et le fait relativement rapidement.
Bonus: Supporte aussi les Palindromes !!!
Cela fonctionne en prenant une entrée pour le mot et la taille de la recherche par mot. Il génère ensuite des infurateurs en déposant des lettres, en insérant des lettres ou en retournant des lettres. Il ajoute ensuite ceux-ci à la grille ainsi que le mot correct. Il vérifie ensuite toutes les occurrences de la première lettre dans toutes les directions pour le mot. Si 1 instance n'est pas trouvée (2 pour les palindromes), le cycle est brutalement forcé. Il envoie ensuite le mot de recherche à la console ainsi qu’un fichier.
La voici à 213 lignes de code avec des espaces et des commentaires.
Je suis loin d'être un expert en C ++, donc je suis sûr qu'il y a des endroits où ce code pourrait être amélioré, mais j'étais satisfait de la manière dont il a abouti.
Voici les sorties.
Je peux le mettre à jour pour générer des recherches de mots légèrement plus "aléatoires".
la source
Excel VBA
Cela fonctionne en plaçant d'abord le mot de manière aléatoire dans la feuille de calcul, de manière aléatoire dans la position et dans la direction, puis en remplissant les espaces non vides de la grille environnante en choisissant de manière aléatoire parmi toutes les lettres sauf la dernière lettre du mot.
BANANA Sortie (2, 1):
ELEMENT Sortie (6, 5):
ABRACADABRA Sortie (2, 3):
la source