El foro más grande en la web, llamado postcount ++, decidió crear un nuevo juego de foro. En este juego, el objetivo es publicar la palabra, pero la palabra debe tener una letra agregada, eliminada o modificada. Tu jefe quería que escribieras un programa que corriera la voz y el diccionario UNIX, mientras trabajas para una empresa que tiene un foro más inteligente con juegos de foro más inteligentes y quiere destruir a la competencia (oye, es tu jefe, no lo hagas). discuta con él, de todos modos obtiene mucho efectivo de su trabajo).
Su programa obtendrá dos argumentos, la palabra y el diccionario. Debido a que el usuario que administra el programa (sí, un usuario, su empresa no tiene recursos para ejecutar bots) no es perfecto, debe normalizar el caso en ambos. Las palabras en el diccionario pueden tener letras ASCII (mayúsculas y minúsculas, pero deben ignorarse durante la comparación), guiones, apóstrofes y espacios no consecutivos en el medio. No tendrán más de 78 caracteres. Tienes que generar una lista de palabras que serían aceptadas en el juego, para romper la diversión de las personas que piensan en palabras manualmente.
Este es un ejemplo de su programa esperado, buscando palabras similares a golf.
> ./similar golf /usr/share/dict/words
Goff
Wolf
gold
golfs
goof
gulf
wolf
El /usr/share/dict/wordses una lista de palabras, con salto de línea después de cada una. Puede leerlo fácilmente con fgets (), por ejemplo.
La empresa en la que trabaja no tiene muchas tarjetas perforadas (sí, es 2014, y todavía usan tarjetas perforadas), así que no las desperdicie. Escribe el programa más corto posible. Ah, y se le pidió que no utilizara implementaciones integradas o externas de la distancia de Levenshtein o cualquier algoritmo similar. Algo sobre No inventado aquí o puertas traseras que aparentemente el vendedor insertó en el idioma (no tiene pruebas de eso, pero no discuta con su jefe). Entonces, si desea distancia, deberá implementarla usted mismo.
Eres libre de usar cualquier idioma. Incluso con tarjetas perforadas, la compañía tiene acceso a los lenguajes de programación más modernos, como Cobol Ruby o Haskell o lo que quieras. Incluso tienen GolfScript, si crees que es bueno para la manipulación de cadenas (no sé, tal vez ...).
El ganador obtiene 15 puntos de reputación de mí y probablemente muchos otros puntos de la comunidad. Las otras buenas respuestas obtendrán 10 puntos, y puntos de la comunidad también. Escuchaste que los puntos no valen nada, pero lo más probable es que reemplacen dolares en 2050. Sin embargo, eso no se confirmó, pero es una buena idea obtener puntos de todos modos.