Le plus grand forum du Web, appelé postcount ++, a décidé de créer un nouveau jeu de forum. Dans ce jeu, l'objectif est de publier le mot, mais le mot doit avoir une lettre ajoutée, supprimée ou modifiée. Votre patron voulait que vous écriviez un programme qui a le mot et le dictionnaire UNIX, car vous travaillez pour une entreprise qui a un forum plus intelligent avec des jeux de forum plus intelligents et veut détruire la concurrence (hé, c'est votre patron, ne le faites pas discutez avec lui, vous obtenez quand même beaucoup d'argent de votre travail).
Votre programme recevra deux arguments, le mot et le dictionnaire. Parce que l'utilisateur qui gère le programme (oui, un utilisateur, votre entreprise n'a pas les ressources pour exécuter les bots) n'est pas parfait, vous devez normaliser le cas dans les deux. Les mots du dictionnaire peuvent avoir des lettres ASCII (majuscules et minuscules, mais elles doivent être ignorées lors de la comparaison), des tirets, des apostrophes et des espaces non consécutifs au milieu. Ils ne dépasseront pas 78 caractères. Vous devez générer une liste de mots qui seraient acceptés dans le jeu, pour briser le plaisir des gens qui pensent aux mots manuellement.
Ceci est un exemple de votre programme attendu, recherchant des mots similaires à golf
.
> ./similar golf /usr/share/dict/words
Goff
Wolf
gold
golfs
goof
gulf
wolf
Il /usr/share/dict/words
s'agit d'une liste de mots, avec un saut de ligne après chacun. Vous pouvez facilement lire cela avec fgets (), par exemple.
L'entreprise dans laquelle vous travaillez n'a pas beaucoup de cartes perforées (oui, c'est 2014, et elles utilisent toujours des cartes perforées), alors ne les gaspillez pas. Écrivez le programme le plus court possible. Oh, et on vous a demandé de ne pas utiliser les implémentations intégrées ou externes de la distance de Levenshtein ou tout autre algorithme similaire. Quelque chose à propos de Not Invented Here ou de backdoors que le vendeur a apparemment inséré dans la langue (vous n'en avez pas de preuve, mais ne discutez pas avec votre patron). Donc, si vous voulez de la distance, vous devrez l'implémenter vous-même.
Vous êtes libre d'utiliser n'importe quelle langue. Même avec des cartes perforées, l'entreprise a accès aux langages de programmation les plus modernes, tels que Cobol Ruby ou Haskell ou tout ce que vous voulez. Ils ont même GolfScript, si vous pensez que c'est bon pour la manipulation de chaînes (je ne sais pas, peut-être ...).
Le gagnant obtient 15 points de réputation de ma part, et probablement beaucoup d'autres points de la communauté. Les autres bonnes réponses obtiendront 10 points, ainsi que des points de la communauté. Vous avez entendu dire que les points ne valent rien, mais il est fort probable qu'ils remplaceront les dolars en 2050. Cela n'a toutefois pas été confirmé, mais c'est quand même une bonne idée d'obtenir des points.