Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2009, 14:04   #1
Паскалька^^
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 53
Вопрос Слова (Паскаль)

Первое слово необходимо преобразовать во второе, используя наименьшее количество следующих действий:
1.удалений символа;
2.замен символа на любой другой.
Ваша программа должна
запросить исходное слово (до 20 символов), которое будет преобразовываться;
запросить слово, которое нужно получить;
для найденного самого короткого преобразования выполненного по правилам сообщить:
число удалений;
число замен;
для контроля слово, образовавшееся после выполнения всех удалений и слово-результат,
или сообщить, что преобразование невозможно.

Пример. Исходные данные: корова, свора. Ответ: удалений 1, замен 3, после удаления – коова, итог –свора.
Паскалька^^ вне форума Ответить с цитированием
Старый 13.11.2009, 14:09   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Люблю вот такие головоломки — но только с заменами! Удаления плавят мозг.

С нетерпением жду, что выдаст форум. Спасибо за задачу!
Sasha_Smirnov вне форума Ответить с цитированием
Старый 13.11.2009, 14:10   #3
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Наработки? Пока скажу вещи, которые понятны всем - невозможно надо выводить, если в первом слове меньше букв, чем во втором. Если букв поровну, то считать число различий. По поводу удаления букв - есть код или хотя бы алгоритмические идеи, или, как всегда, все надо делать юзерам форума?
З.Ы.
Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Люблю вот такие головоломки — но только с заменами! Удаления плавят мозг.
С нетерпением жду, что выдаст форум. Спасибо за задачу!
В чем, собственно, головоломка? У меня на алгоритмическое решение ушло 15 секунд, так как сдесь не надо никаких особенных "уловок". Естественно, если думать над решением, которое будет работать для слов из 10000 символов, то надо юзать спецалгоритмы или "мощную логику". А сдесь ничего такого не надо.

Последний раз редактировалось LeBron; 13.11.2009 в 14:15.
LeBron вне форума Ответить с цитированием
Старый 13.11.2009, 14:12   #4
Паскалька^^
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 53
По умолчанию

LeBron, в том и дело, что пока что мыслей нет....хотелось бы какую-либо наводку узнать...
Паскалька^^ вне форума Ответить с цитированием
Старый 13.11.2009, 14:18   #5
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Паскалька^^ Посмотреть сообщение
LeBron, в том и дело, что пока что мыслей нет....хотелось бы какую-либо наводку узнать...
С 20 символами можно писать даже полный перебор, даже "тупой полный перебор", просто сгенерить все возможные упорядоченные комбинации с этих 20 букв, и для каждой проверять, если в нее входит столько букв, сколько в нашем образце, то посчитать количество букв-совпадений. Для 20 букв - миллион комбинаций, вместе с самой генерацией и даже с проверкой результата - при прямых руках 50 млн операций, если не меньше. Работать будет быстрее, чем за секунду.
Можно и оптимальнее, но не вижу смысла.
LeBron вне форума Ответить с цитированием
Старый 13.11.2009, 14:25   #6
Паскалька^^
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 53
По умолчанию

ну по сути нужно сначала запросить два слова(строки длиной <20).
Далее сравнить их длины...как сказано выше...
и далее входить в цикл сравнения 2х слов, если это возможно. а вот именно с заменами и удалениями проблемы...
Паскалька^^ вне форума Ответить с цитированием
Старый 13.11.2009, 14:32   #7
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Паскалька^^ Посмотреть сообщение
ну по сути нужно сначала запросить два слова(строки длиной <20).
Далее сравнить их длины...как сказано выше...
и далее входить в цикл сравнения 2х слов, если это возможно. а вот именно с заменами и удалениями проблемы...
Начало верное. Вы растете в моих глазах, даже приятно помогать такому человеку О каком цикле идет речь? Имеете ввиду посимвольное сравнение строк для подсчета количества различий? По поводу замен и удалений - никто фактически и не просит их делать, главное - подсчитать количество. Для полного перебора заводим дополнительное хранилище на лучший "образец после удаления", если у нас получился вариант с лучшим ответом, чем был раньше - просто меняем "образец" в хранилище.
LeBron вне форума Ответить с цитированием
Старый 13.11.2009, 14:37   #8
Паскалька^^
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 53
По умолчанию

Да, я хочу сосчитать различия...
Ещё у меня вопрос по поводу наименьшего количества действий...
Как бы это более оптимально выразить?
Паскалька^^ вне форума Ответить с цитированием
Старый 13.11.2009, 14:40   #9
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Паскалька^^ Посмотреть сообщение
Да, я хочу сосчитать различия...
Ещё у меня вопрос по поводу наименьшего количества действий...
Как бы это более оптимально выразить?
Различия разумно считать только для слов равной длины, примерно так:
Код:
for i:=1 to length(st) do if st[i]<>st1[i] then inc(ans);
внчале нулевая переменная ans будет хранить число различий. По поводу наименьшего количества действий - понятно, что для удаления лишних символов всегда нужно одинаковое количество действий (равное числу этих символов), следовательно, нужно так удалять символы, что бы получилось "слово", наиболее близкое к конечной цели.

Последний раз редактировалось LeBron; 13.11.2009 в 14:46.
LeBron вне форума Ответить с цитированием
Старый 13.11.2009, 14:45   #10
Паскалька^^
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 53
По умолчанию

LeBron, спасибо)) сейчас ещё подумаю и отпишусь..
Паскалька^^ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47
Как удалить текст до слова, потом от слова ? littlecoder Общие вопросы Delphi 7 29.12.2008 00:57
Перенести в новую строку только те слова, которые разделены одним пробелом. задача на паскаль SashaPRO Паскаль, Turbo Pascal, PascalABC.NET 1 22.12.2008 20:01
Выделить русские слова скобками(паскаль) gred Помощь студентам 8 09.05.2008 19:25
Реализовать возможность автоматического исправления слова "грамматика". Паскаль Den Помощь студентам 6 04.06.2007 10:48