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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2010, 00:41   #1
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию Рандомизация текста

Здравствуйте, возникла ситуация в которой хотелось бы написать алгоритм на Delphi, который генерирует уникальный текст на основе заданного шаблона для выборки, например:
Код:
{Привет!|Добрый день|Добрый вечер|Хай}
Решил вам {запостить|кинуть сообщение|отписать} о моей {проблеме|не большой {задаче|трудности}| дилемме}.
В результате чего, могут получиться, например, такие варианты:
Код:
Хай
Решил вам кинуть сообщение о моей проблеме.
или, например:

Код:
Добрый день
Решил вам отписать о моей не большой трудности.
Подскажите, пожалуйста, возможно уже есть написанные алгоритмы и не стоит ломать голову над этим?
HoLToFF вне форума Ответить с цитированием
Старый 21.03.2010, 01:45   #2
-HunteR-
Форумчанин
 
Аватар для -HunteR-
 
Регистрация: 04.11.2007
Сообщений: 117
По умолчанию

Массив строк и
random(x);
Перед тем, как выложить код, я его всегда проверяю.
Если помог - тыкни на на весы слева, под аватарой.
-HunteR- вне форума Ответить с цитированием
Старый 21.03.2010, 02:25   #3
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Зашибись у тебя задачка. Это же надо быть таким мазохистом. Хотя по сути программисты- мазохисты своего мозга )))
И че прямо по данному шаблону надо все сделать или возможны другие варианты построения предложений. Просто таких предложений можно сделать уйму. Как осмысленных так и вообще не связанных предложений по смыслу
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 21.03.2010, 06:34   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

HoLToFF, вполне реально. прямо по предложенному шаблону.
Надеюсь, внутри вариантов подварианты недопустимы?..
А так, простейший алгоритм — читаем из входного потока(файла) и, пока не встретили открывающую фигурную скобку, всё выводим в выходной поток(файл). Как только встретили открывающую фигурную скобку - ничего не выводим, всё читаем в память (если программа пишется на Delphi, я бы предложил использовать TStringList, просто возни чуть меньше, но можно и просто массив строк заполнять), разбивая по разделителю |, читаем до тех пор, пока не встретили закрывающую фиг.скобку. Как только встретили - сразу генерим случ. число от 1 до Кол-ваСчитанныхВариантов, и в выходной поток(файл) выводим случайный вариант, продолжаем выполнять...
всё абсолютно просто, я бы такую программку минут за 25 написал...


p.s. обратите внимание, в исходном шаблоне у Вас ошибка структуры: лишняя закрывающая фиг.скобка после трудности}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2010, 08:22   #5
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

Serge_Bliznykov, спасибо за совет, но к сожалению, это не лишняя закрывающая скобка, а как раз вложенный подвариант, что очень усложняет задачу. Алгоритм без вложенности я себе четко представлял.
HoLToFF вне форума Ответить с цитированием
Старый 21.03.2010, 08:44   #6
Deamonig
Форумчанин
 
Аватар для Deamonig
 
Регистрация: 19.09.2009
Сообщений: 166
По умолчанию

Ну тогда применяй динамическое программирование, так как неизвестно сколько там будет вложенных подвариантов, ну и рекурсивную процедуру анализа текста, которая сначала считывает у память то, что после знака { , затем если в данном тексте вновь встречается знак { она вызывает сама себя и все повторяется сначал. В итоге у вас будет множество массивов строк или как вам удобней в память запихать, сами уж смотрите, и после чего рандомно выбираете из предложенных вариантов. Идея думаю ясна )
Deamonig вне форума Ответить с цитированием
Старый 21.03.2010, 11:36   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от HoLToFF
это не лишняя закрывающая скобка, а как раз вложенный подвариант, что очень усложняет задачу.
HoLToFF, понял,это я проглядел...

Deamonig полностью, на 100%, согласен.
либо динамически создавать структуры (поверьте, это несложно), либо, великолепнейшее решение через рекурсию - функцию, которая возвращает случайное значение одного из вариантов, заключённых в фигурные скобки.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2010, 13:40   #8
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

Реализовал через рекурсию, всем спасибо за помощь
HoLToFF вне форума Ответить с цитированием
Старый 19.10.2010, 00:05   #9
makscj
Новичок
Джуниор
 
Регистрация: 19.10.2010
Сообщений: 1
По умолчанию

Цитата:
Сообщение от HoLToFF Посмотреть сообщение
Реализовал через рекурсию, всем спасибо за помощь
Покажи пожалуйста свой код, есть такая же задача, но хз как сделать(
makscj вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форматирование текста Tomoyo HTML и CSS 2 18.07.2013 19:33
Генератор текста, Анализатор текста, График, С++ darel Помощь студентам 0 14.03.2010 20:15
Псевдо случайные числа (Рандомизация) Demien Общие вопросы Delphi 7 16.07.2009 03:58
Рандомизация (BDelphi) VadEr Помощь студентам 3 24.03.2009 16:06
Вставка текста Pedro Общие вопросы Delphi 4 27.01.2008 10:27