Il più grande forum sul web, chiamato postcount ++, ha deciso di creare un nuovo gioco di forum. In questo gioco, l'obiettivo è pubblicare la parola, ma la parola deve avere una lettera aggiunta, rimossa o modificata. Il tuo capo voleva che tu scrivessi un programma che ottiene la parola e il dizionario UNIX, mentre lavori per un'azienda che ha un forum più intelligente con giochi di forum più intelligenti e vuole distruggere la concorrenza (ehi, è il tuo capo, non farlo discutere con lui, avrai comunque un sacco di soldi dal tuo lavoro).
Il tuo programma otterrà due argomenti, la parola e il dizionario. Poiché l'utente che gestisce il programma (sì, un utente, la tua azienda non ha risorse per eseguire i robot) non è perfetto, dovresti normalizzare il caso in entrambi. Le parole nel dizionario possono avere lettere ASCII (sia maiuscole che minuscole, ma devono essere ignorate durante il confronto), trattini, apostrofi e spazi non consecutivi nel mezzo. Non saranno più lunghi di 78 caratteri. Devi creare un elenco di parole che sarebbero accettate nel gioco, per spezzare il divertimento delle persone che pensano manualmente alle parole.
Questo è un esempio del tuo programma previsto, cercando parole simili a golf.
> ./similar golf /usr/share/dict/words
Goff
Wolf
gold
golfs
goof
gulf
wolf
C'è /usr/share/dict/wordsun elenco di parole, con l'interruzione di riga dopo ciascuna. Puoi facilmente leggerlo con fgets (), ad esempio.
La società in cui lavori non ha molte schede perforate (sì, è il 2014 e usano ancora schede perforate), quindi non sprecarle. Scrivi il più breve programma possibile. Oh, e ti è stato chiesto di non usare implementazioni integrate o esterne della distanza di Levenshtein o algoritmi simili. Qualcosa su Non inventato Qui o backdoor che apparentemente il venditore ha inserito nella lingua (non ne hai la prova, ma non discuti con il tuo capo). Quindi, se vuoi la distanza, dovrai implementarla da solo.
Sei libero di usare qualsiasi lingua. Anche con le schede perforate, l'azienda ha accesso ai più moderni linguaggi di programmazione, come Cobol Ruby o Haskell o qualunque cosa tu voglia. Hanno anche GolfScript, se pensi che sia buono per la manipolazione delle stringhe (non lo so, forse ...).
Il vincitore ottiene 15 punti reputazione da me, e probabilmente molti altri punti dalla community. Le altre buone risposte riceveranno 10 punti e anche punti dalla comunità. Hai sentito che i punti sono inutili, ma molto probabilmente sostituiranno i dolar nel 2050. Tuttavia, ciò non è stato confermato, ma è comunque una buona idea ottenere punti.