O maior fórum da web, chamado pós-contagem ++, decidiu criar um novo jogo no fórum. Neste jogo, o objetivo é postar a palavra, mas a palavra precisa ter uma letra adicionada, removida ou alterada. Seu chefe queria que você escrevesse um programa que recebesse a palavra e o dicionário UNIX, enquanto trabalha para uma empresa que possui um fórum mais inteligente com jogos mais inteligentes e deseja destruir a concorrência (ei, é seu chefe, não discuta com ele, você recebe muito dinheiro do seu trabalho).
Seu programa receberá dois argumentos, a palavra e o dicionário. Como o usuário que gerencia o programa (sim, um usuário, sua empresa não possui recursos para executar bots) não é perfeito, você deve normalizar o caso em ambos. As palavras no dicionário podem ter letras ASCII (maiúsculas e minúsculas, mas devem ser ignoradas durante a comparação), traços, apóstrofes e espaços não consecutivos no meio. Eles não terão mais de 78 caracteres. Você precisa produzir uma lista de palavras que seriam aceitas no jogo, para acabar com a diversão das pessoas que pensam nas palavras manualmente.
Este é um exemplo do seu programa esperado, verificando palavras semelhantes a golf
.
> ./similar golf /usr/share/dict/words
Goff
Wolf
gold
golfs
goof
gulf
wolf
A /usr/share/dict/words
é uma lista de palavras, com quebra de linha após cada uma. Você pode ler isso facilmente com fgets (), por exemplo.
A empresa em que você trabalha não possui muitos cartões perfurados (sim, é 2014 e eles ainda usam cartões perfurados), portanto, não os desperdice. Escreva o programa mais curto possível. Ah, e você foi solicitado a não usar implementações internas ou externas da distância de Levenshtein ou qualquer algoritmo semelhante. Algo sobre Não inventado aqui ou backdoors que aparentemente o fornecedor inseriu no idioma (você não tem provas disso, mas não discute com seu chefe). Portanto, se você quiser distância, terá que implementá-la você mesmo.
Você é livre para usar qualquer idioma. Mesmo com cartões perfurados, a empresa tem acesso às mais modernas linguagens de programação, como Cobol Ruby ou Haskell ou o que você quiser. Eles até têm GolfScript, se você acha que é bom para manipulação de strings (talvez eu não saiba ...).
O vencedor recebe 15 pontos de reputação de mim e provavelmente muitos outros pontos da comunidade. As outras boas respostas receberão 10 pontos e pontos da comunidade também. Você ouviu dizer que os pontos são inúteis, mas provavelmente substituirá os dólares em 2050. No entanto, isso não foi confirmado, mas é uma boa ideia obter pontos de qualquer maneira.