Решил рассказать, как работает мое хулиганство,
переводчик на язык Йоды.
Итак, на вход приходит текст. Например, такой:
Однажды, в студеную зимнюю пору, я из лесу вышел; был сильный мороз. Гляжу, поднимается медленно в гору лошадка, везущая хворосту воз.
Что дальше?
В первую очередь надо привести его к удобоваримому виду: убрать двойные пробелы, символы перевода строки, спустить регистр в нижний. Затем надо «приклеить» предлоги к словам, идущим за ними (чтобы получилось одно «слово», окруженное пробелами) с помощью какого-нибудь специального символа, который потом можно будет убрать. Например, символ подчеркивания. Еще желательно «приклеить» прилагательные к существительным. Но другим «клеем» (я выбрал знак плюса), я потом поясню почему. Это надо, чтобы при перемешивании слов смысл не сильно искажался:
однажды, в_студеную+зимнюю+пору, я из_лесу вышел; был сильный+мороз. гляжу, поднимается медленно в_гору лошадка, везущая+хворосту воз.
Далее аккуратно расчленяем текст на предложения, запоминая чем заканчивается каждая строка:
1. однажды, в_студеную+зимнюю+пору, я из_лесу вышел;
2. был сильный+мороз.
3. гляжу, поднимается медленно в_гору лошадка, везущая+хворосту воз.
При грубом приближении каждое предложение состоит из субпредложений, разделенных запятыми:
1.1 однажды
1.2 в_студеную+зимнюю+пору
1.3 я из_лесу вышел;
2.1 был сильный+мороз.
3.1 гляжу
3.2 поднимается медленно в_гору лошадка
3.3 везущая+хворосту воз
Обращу еще раз внимание - «склейки» из прилагательного с существительным считаются одним словом.
Перемешиваем внутри каждого субпредложения слова. Для этого бьем субпредложение на слова, используя пробел как разделитель, перемешиваем слова, затем случайным образом переставляем местами слова в «склейках» и склеиваем обратно субстроки:
1.1 однажды
1.2 в_студеную+пору+зимнюю
1.3 вышел из_лесу я;
2.1 был мороз+сильный.
3.1 гляжу
3.2 в_гору поднимается лошадка медленно
3.3 хворосту+везущая воз
Склеиваем обратно строки, возвращая знаки, которыми заканчивались строки (правда, точку с запятой возвращаем простой точкой), заодно первую букву каждой строки делаем строчной:
1. Однажды в_студеную+пору+зимнюю вышел из_лесу я;
2. Был мороз+сильный.
3. Гляжу в_гору поднимается лошадка медленно хворосту+везущая воз
Склеиваем строки вместе, убираем служебные символы:
Однажды, в студеную пору зимнюю, вышел из лесу я. Был мороз сильный. Гляжу, в гору поднимается лошадка медленно, хворосту везущая воз.
Вполне по-йодовски, по-моему. По этому алгоритму можно написать программу на любом языке программирования. А если лень писать, можете посмотреть
листинг этого прикола.