Рассмотрим такие элементарные преобразования слов, записанных малыми
латинскими буквами:
Замена любой буквы на любую другую, например test -> text;
Удаление любой буквы, например text -> ext; або text -> txt;
Вставка любой буквы в начало, середину или конец, например each -> peach, bat -> boat, або test -> tests;
Взаимная перестановка двух соседних букв, например cat -> act.
Определим расстояние между двумя словами как минимальное количество названных
элементарных преобразований, которое надо совершить над одним из слов, чтобы
получить другое.
Заданы два файла - текст и словарь. Напишите программу,
определяющую для каждого слова текста все слова из словаря, находящиеся от
этого слова на наименьшем расстоянии.
Ваша программа должна называться NEAREST.* где расширение * зависит от языка программирования.
Текст содержится в текстовом ASCII-файле TEXT.DAT, каждая строка которого имеет длину не более 80 символов ? может содержать несколько слов. Соседние слова в строке разделены пробелом. Знаков пунктуации (точек, запятых, и т.п. нет.
Словарь содержится в текстовом ASCII-файле LEX.DAT, первая строка которого содержит количество слов (оно не перевышает 4000), а каждая следующая строка содержит отдельное слово длиной не более 20 символов. Слова упоряочены по алфавиту.
Результат надо вывести в текстовый ASCII-файл NEAREST.SOL с
такой структурой. Для каждого слова из TEXT.DAT надо вывести в
отдельной строке минимальное расстояние до слов LEX.DAT, в следующей строке - количество ближайших слов оз LEX.DAT, а далее - все ближайшие слова из LEX.DAT в отдельных строках в алфавитном порядке. Ответы для слов из TEXT.DAT надо выводить последовательно в соответствии с порядком слов в тексте, не разделяя их пустыми строками.