Восстановленная логика оригинальной программы GrinchSoft, 1991, переписана на современный стек: чистый HTML/CSS/JavaScript без зависимостей. Запускается в любом браузере, никакой сервер не нужен.
СТИХОПЛЮЙ V4.0 - GrinchSoft (C), 1991.Распространяется свободно.Если Вам понравилась эта программа, Вы можете выслать 5 руб. по адресу: 141740, до востребования, Гринчуку Михаилу Ивановичу. Просьба также сообщать о случаях публикации созданных с помощью этой программы текстов.
Оригинальный TUI-баннер программы дословно сохранён в UI (раскрывающийся блок
под заголовком). Автор программы — Михаил Иванович Гринчук, 1991.
Словари rhymer.dat, rhymer2.dat, rhymer.res, конфиг onegin.cfg —
распространяются свободно вместе с оригинальной программой и используются в
этом клоне без изменений.
Этот клон — неофициальный, распространяется с тем же «свободным» условием.
Все отклонения от оригинальной логики задокументированы в CHANGES.md.
История программы, личность автора (Михаил Иванович Гринчук, ~1951–1981 г.р.),
попытки его найти и хронология проекта восстановления — в HISTORY.md.
| файл | назначение |
|---|---|
index.html |
UI (форма с метром, рифмой, загрузкой файлов, кнопкой «сочинить») |
style.css |
оформление в стиле DOS-Text-UI |
stihoplyui.js |
парсер словаря/конфига + алгоритм генерации |
onegin.cfg |
пример конфига (строфа «Я помню чудное мгновенье…») |
rhymer.dat |
словарь русских слов (445 записей, 1–8 слогов) |
rhymer2.dat |
английский словарь (опционально) |
В UI есть выпадашка с готовыми размерами (метр + рифма). Пресеты:
Четверостишия:
- Ямб 4-стопный, мужское окончание, ABAB (8 слогов:
-'-'-'-'-') - Ямб 4-стопный, женское окончание, ABAB (9 слогов:
-'-'-'-'-) - Ямб 4-стопный, женское, AABB
- Ямб 3-стопный, чередование окончаний, ABAB (как «тот город поэтичный / скорей просил мороз»)
- Ямб 3-стопный, женское, ABAB (7 слогов)
- Хорей 4-стопный, женское, ABAB (8 слогов)
- Хорей 3-стопный, мужское, ABAB (6 слогов)
- Дактиль 2-стопный, мужское, ABAB (6 слогов)
- Анапест 2-стопный, мужское, ABAB (6 слогов)
- Амфибрахий 3-стопный, мужское, ABAB (9 слогов)
Стансы:
- Онегинская строфа (14 строк, как в
rhymer.cfg) - Сонет: 3 катрена + 2 строки (14 строк, рифма ABAB CDC DEDE FF)
- Шестистишие (6 строк, 6-стопный ямб)
Выбираешь пресет → жмёшь «применить» → строки таблицы заполняются → жмёшь «сочинить».
Можно и руками: пишешь - (безударный) и ' (ударный) в колонке «размер», ставишь букву рифмы в колонке «рифма».
# просто открыть в браузере
xdg-open index.html # Linux
open index.html # macOS
start index.html # WindowsИли поднять локально (если хочется HTTP, например для тестов):
python3 -m http.server 8080
# затем http://localhost:8080-
Парсинг словаря (
rhymer.dat):- каждая запись — строка в CP866 (или UTF-8 BOM-без), 25 байт слово + 10 байт
шаблон ударений (
-/') + 5 байт ключ рифмы + 0–2 байта часть речи (N,A,VН,VП,?V,?или пусто).
- каждая запись — строка в CP866 (или UTF-8 BOM-без), 25 байт слово + 10 байт
шаблон ударений (
-
Парсинг конфига (
rhymer.cfg):- 1–35: имя словаря;
- 36–70: имя ресурсов;
- далее 20 полей по 25 знаков: в начале шаблон ударений, последний знак (если не пробел) — буква рифмы.
-
Генерация (
compose()):- для каждой строки ищутся все возможные разложения шаблона ударений строки на последовательность словарных статей, чьи шаблоны складываются в строку;
- к разложениям применяется POS-фильтр (прилагательное должно идти перед существительным; однословная строка не может быть наречием);
- рифменные группы (строки с одинаковой буквой) получают общий rhyme-якорь; при наличии — последнее слово строки фильтруется по этому якорю;
- из подходящих разложений выбирается случайное (зерно — время по таймеру).
| фича | оригинал RHYMER.EXE | этот клон |
|---|---|---|
| формат словаря 42 байта | ✅ | ✅ |
| формат конфига 35+35+25·N | ✅ | ✅ |
| поддержка до 20 строк в строфе | ✅ | ✅ |
| многословное заполнение строк | ✅ (диспетчер 0x2ce9) | ✅ (бэктрекинг) |
| POS-фильтрация | ✅ (по первой букве строки) | |
| фиксация рифмы для группы | ✅ | |
| ограничение «не то же слово подряд» | ✅ (вероятно) | ✅ |
файл ресурсов (.res) |
✅ (для резервных рифм) | |
| интерактивное редактирование строк | ✅ (F3/F4/F7/F8) | ✅ (кнопки) |
| сохранение в файл вывода | ✅ (F5 + rhymer.out) | ✅ (скачивание .txt) |
| защита от PGPROT/virus | ✅ (CRC-проверка) | ❌ неактуально для веба |
| TUI-интерфейс (псевдографика) | ✅ | ❌ заменён HTML |
- DOS-специфичные вещи: PSP, релокации, инт 21h/10h/1Ah.
- CRC-проверка PGPROT — это защита 1991 года от вирусов, в браузере она не нужна.
- Интерактивная помощь по F-клавишам внутри TUI.
- Файл ресурсов
.res— содержит «запасные» стихи, которые программа подставляла, когда не могла сгенерировать. Сейчас клон возвращает[нет: шаблон].
- Оригинальный RHYMER.EXE хранит в
[0x1940]предвычисленный список «слотов» для каждой строки (до 21 слова на строку). Мой клон делает разложение на лету через бэктрекинг. Результат — аналогичный, но с разной номенклатурой (словарь маленький, потому повторы неизбежны). - Защита от повторов в оригинале — запрет «то же слово в той же позиции»; в клоне — запрет «то же слово в любой позиции следующей строки». Это слегка жёстче, но даёт более разнообразный текст.