Программа для перемешивания номеров параграфов


Ср Июн 01, 2016 14:01
GreyRaven
7  239  8  28  Герой легенд

Иногда на форуме и в чате авторы просят программистов создать программу, которая бы присваивала случайные номера параграфам в их книге-игре.

01-06-16 10:59 GalinaSol Мы с Каденой долго просили перемешивалку. Так и не допросились. Товарищи программисты, неужели так сложно сделать фиговину, чтоб тупо перемешивала числа в заданном диапазоне?

В общем, есть такие проблемы:
1) (малая) Игроки иногда жалуются на то, что при переходе с параграфа А на параграф Б оказывается, что они имеют соседние порядковые номера, а это неприкольно. Автору приходится разбрасывать номера подальше друг от друга, при этом запоминая/записывая, какие номера он занял, а какие остались.

2) (поважнее): выборы на параграфе А ведут один на Б, друголй на В, при этом автор так неумело распорядился номерами, что оказывается, что Б и В – соседи, стоят на одной странице, и игрок может читать оба, теряя интригу

Нужно, чтобы при написании параграфов прога сама расставляла номера, отслеживая уже занятые, причем так, чтобы номера соседних параграфов (следующих друг за другом или двух параллельных следующих не стояли рядом.

Наверное, проще нужно так: сделайте генератор случайной последовательности из порядковых номеров в заданном диапазоне с условием неповторяемости номеров и тем, условием, чтобы соседние позиции отстояли друг от друга минимум на 5 единиц.

01-06-16 11:32 maltiez GreyRaven: и чтобы ссылки не терялись после перемешивания
01-06-16 11:33 GalinaSol maltiez: это уже усложнение. Дайте мне столбик чисел для начала хотя бы...


Ср Июн 01, 2016 15:49
Jumangee
Во всех бочках затычка

С чем именно работает программа? С текстом в doc? Или?

Ср Июн 01, 2016 16:00
Jumangee
Во всех бочках затычка

С doc сложности только в форматировании, а для txt могу сделать. Если переходы в тексте будут четко выражены (т.е. соответствовать правилам общим для книги)

Ср Июн 01, 2016 16:06
Jumangee
Во всех бочках затычка

В случае использования тэгов не будет ошибок, при использовании скобок и просто тире ошибки более чем возможны

Ср Июн 01, 2016 17:24
Larkin
12  4  Свободный искатель

Полная инструкция: Как перетасовать параграфы в книге игре

Действуем строго по алгоритму (можно выключить мозг). В итоге у вас получится готовая книга игра, с перемешанными случайно параграфами.

Алгоритм:
1) Откройте книгу игру в .doc документе (Microsoft Word);
2) Предположим, что у вас номера параграфов расположены на отдельной строке, т.е обрамляются символами абзаца. Если это не так, тогда придется привести к такому виду. Обычно во многих книгах это именно так. У вас должно получится такое:
1
Текст первого параграфа
2
Текст второго параграфа
3
Текст третьего параграфа
4
Текст четвертого параграфа

Ещё придется удалить все изображения. Этого достаточно;

3) Нажимаем сочетание клавиш ctrl+H, открывается окно замены текста. Дальше от вас требуется поочередно провести двадцать две замены. Копируйте отсюда (без пробелов), вставляйте в соответствующие поля и нажимайте кнопку «Заменить всё».
^p -> \p
^l -> \L
^t -> \t
\p1 -> ^p1
\p2 -> ^p2
\p3 -> ^p3
\p4 -> ^p4
\p5 -> ^p5
\p6 -> ^p6
\p7 -> ^p7
\p8 -> ^p8
\p9 -> ^p9
0\p -> 0^t.^t
1\p -> 1^t.^t
2\p -> 2^t.^t
3\p -> 3^t.^t
4\p -> 4^t.^t
5\p -> 5^t.^t
6\p -> 6^t.^t
7\p -> 7^t.^t
8\p -> 8^t.^t
9\p -> 9^t.^t

В результате этих манипуляций ваша книга станет похожа на таблицу. ВСЁ ПРАВИЛЬНО!

4) Сохраните документ в формате .txt, нажмите ОK и закройте Word;
5) Запустите Microsoft Office Excell, и откройте этот .txt файл. Эксель покажет вам какое-то окошко, нажмите далее, убедитесь, что в качестве разделителя столбцов стоит табуляция и нажмите готово;
У вас появится вот такая штука на экране:

6) Удалите лишние строки вверху документа, в ячейке A1 должна стоять цифра 1. В столбце A – номера параграфов. B – Пустой столбец, С – это тексты параграфов;
7) Осмотрите столбцы справа от столбца С, если в этих столбцах есть какой-то текст, то значит в вашей книге были строки, которые заканчивались числом. Ничего страшного. Просто запихайте в столбец С всё что из него вылезло. Допустим вы нашли текст в ячейке E36, вырежте этот текст в конец ячейки С36.
8) Скопируйте в ячейку D2 эту строку: "=СЛЧИС()" без кавычек. В результате в ячейке появятся какие-то цифры;
9) Потяните за нижний правый угол ячейки D2, курсор превратится в плюс. Тяните вниз, пока не будет заполнен весь столбец D. В результате весь столбец будет заполнен случайными числами;

10) Выделите столбец D и нажмите кнопку «Сортировка и фильтр», на закладке «Главная» в 2007 экселе; Выберите сортировку от мин. к макс. Эксель предложит расширить диапазон.

Нажмите сортировка;
11) О чудо! Ваши параграфы оказались отсортированы случайным образом. Можете повторить предыдущий шаг. Можете отсортировать их, так как вам хочется, просто меняйте строки местами;
12) Когда вам надоест сортировать, встаньте на ячейку B1 и введите цифру 1, а в ячейку B2 цифру 2, выделите обе эти ячейки и тяните за нижний правый край ячейки B2, в результате весь столбец заполнится числами от 1 до Кол-во параграфов. Этот столбец это номера параграфов после сортировки;
13) Выделите столбцы B и С полностью и скопируйте в новый .txt файл и сохраните. Эксель не закрывайте. Запустите Word и откройте этот .txt файл.
14) В конце требуется проделать действия обратные шагу 3. Также вставляем и заменяем:

^t -> ^p
\p -> ^p
\L -> ^l
\t -> ^t

15) Осталось только пройтись по тексту и заменить переходы. То что было в столбце A заменить на число из столбца B. Можно также воспользоваться инструментом "Найти и заменить". Замен будет столько, сколько параграфов в книге.

Готово! И никаких программ не надо.

Пт Июн 03, 2016 1:04
veresk
1  Путник

Всем привет!
Для того, чтобы перемешать параграфы, а затем пронумеровать их правильно вместе с ведущими к ним ссылками, я действовал таким образом:
Для того, чтобы без головной боли перемешать параграфы законченной книгры, я предлагаю следующий принцип: сгруппировать имеющийся набор параграфов по сценам: все параграфы, относящиеся к спасению воронёнка – 1 группа; все параграфы, относящиеся к спасению щуки – в 2 группу и так далее.
Параграфы внутри групп нумеруются и получается столбец из строк, где первое число, это текущий номер параграфа, далее идёт условная метка сцены и порядковый номер параграфа в сцене:
список 1.
5, воронёнок 1
6, воронёнок 2
xx, воронёнок 9
Далее создаём условный список сцен:
список 2.
1. сказки
2. концовки
3. уж
4. щука
и т.д.
Порядок сцен в этом списке не соответствует чередованию сцен в книге и даже должен от него отличаться.
Потом строки из списка 1 вырезаются и вставляются в новый текстовик. При этом надо стараться сделать так, чтобы начальный параграф первой сцены соседствовал с конечным параграфом из другой сцены.
Таким образом определяется последовательность перемешанных параграфов.
Следующим шагом тексты параграфов выстраиваются в установленной очерёдности. Однако теперь их надо правильно пронумеровать сверху донизу, а так же дать верные номера ведущим к ним ссылкам. щДелается это следующим образом:
Я писал книгру в обычном txt с использованием-разметки, позволяющей легко создавать внутристраничные ссылки и заголовки. С помощью текстового редактора WriteMonkey периодически конвертировал текстовик в html для того, чтобы оценить сделанную работу. В нём же можно сделать и вордовский документ с переходами.
Когда пишем ссылку в исходном текстовом документе, то все номера параграфов до 9 пишутся с добавлением 0 впереди. Получается 01,02. Далее к этой цифре добавляется любая латинская буква. У меня это была буква p .
В окончательном виде ссылка выглядит так: [p32](#l32)
Заголовок соответствующего параграфа выглядит так:
#p32{#l32}
Текст внутри круглых и фигурных скобок так-же помечен буквенным маркером, чтобы их случайно не захватило какое-нибудь переименование.
Мы перемешали параграфы и 32 параграф стал 21. Как быстро сделать исправления в исходном текстовике? Вызывается диалог замены. Заменяем p32, на а21. Буква в результирующем номере изменена потому, что в тексте всё ещё присутствует параграф p21, который надо бы изменить, к примеру, на a05. В результате видимые номера заголовка и всех ведущих к ним переходов принимают желаемый вид.
В конце концов все видимые цифры в файле игры должны быть промаркированы буквой a. В дальнейшем от неё несложно избавиться через всё ту же замену. Заменяем #aна # и дело в шляпе.
Вот таким образом я и действовал.
В случае, если рассортировать вручную нужно под 200 и более файлов, думаю, имеет смысл тасовать параграфы в группах по99 параграфов. Обработана первая такая группа – за ней следует ещё одна группа из99-и. Таким образом книга никогда не пошлёт читателя с 2 параграфа на 198-й. Почему я выбрал максимальным граничным объёмом ранжирования именно 99? Исходя из уже найденного принципа ручного тасования параграфов и дальнейшего их переименования. Что делать с двухзначными числами я уже знаю. А вот если придётся когда-нибудь переименовывать параграф [p198], тогда все номера параграфов должны иметь трёхзначный вид. То е. 1-параграф будет выглядеть как 001, а 32-й, как 032. Думаю, что это не очень удобно, а если и реализуемо, то излишне.

Добавил через 9 минут 38 секунд:

В случае, если книгра приросла дополнительным десятком-другим параграфов и их надо смешать с уже имеющимися – заголовкам и ссылкам возвращаются буквенные маркеры и весь вышеописанный процесс повторяется во всех этапах. Но возможен и другой способ встройки новых параграфов в общий файл.
Допустим игра уже имеет 70 параграфов. К ним дописано ещё 30.
Всем новым параграфам временно присваиваются номера от 71 до 100. Далее каждый новодобавленный параграф меняется местами с каким-нибудь из "старых". Таким образом мы получаем текст, в котором номера 60 параграфов не соответствуют истине. Как призвать их к порядку, я уже писал выше.

Пт Июн 03, 2016 23:50
maltiez
12  365  21  Магистр неизящных искусств

На примере Падшего Джуманджи перемешал параграфы. Результат внизу. В одном месте ссылка рядом (из п. 50 на п. 49). А так очень даже хорошо программа работает.

Джуманджи, много усилий такое перемешивание занимает? Что для этого надо делать?


Пт Июн 03, 2016 23:57
Jumangee
Во всех бочках затычка

Перемешивалку работает онлайн, вот здесь: http://quest-book.ru/tools/article_mixer/
Скармливаем файл, получаем файл

Входной файл должен быть формата txt (только текст) следующего вида:

1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
goto [go]2[/go]

2
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbb
goto [go]3[/go]
goto [go]4[/go]

3
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccccccccccccccc
goto [go]5[/go]
goto [go]7[/go]

4
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
goto [go]2[/go]
goto [go]8[/go]

У Галины в тексте некоторые переходы были на новой строке, отдельно – программа посчитает такие тоже номером параграфа и в результате будет ошибка (когда встретится этот номер ещё раз, программа остановится и скажет что вы плохой человек Smile )

На выходе получаем текст вида:
[title]4[/title]
Дело сделано.....
... [go]36[/go]
... [go]51[/go]
... [go]51[/go]

Здесь [title] это обёртка для дальнейшей обработки в пдф моими силами

Т.е. из сложностей сейчас – только все переходы обернуть в тэг [go]

Естественно возможны ошибки и глюки, бета Smile

Представьтесь для добавления комментариев - регистрация в один клик!
Разделы форума