Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Аватара пользователя
Света
 
Сообщения: 489
Зарегистрирован: 18.06.2016, 19:38
Играю в: Train Simulator 2018
Роль: Разработчик
Блог: Просмотр блога (7)
Архивы
Поиск в блогах

1 из 52 из 53 из 54 из 55 из 5

Генератор номеров ПС

Постоянная ссылка Света 05.05.2018, 17:02

Представляю вашему вниманию набросок скрипта, назначение которого - генерировать номера вагонов, то есть, хоть немного упростить эту хоть и простую, но занудную работу.

В процессе работы скрипт генерирует номера согласно указанному шаблону, отслеживает и блокирует создание дубликатов, сохраняет результат работы в файл numbers.csv в требуемом игрой формате и параллельно в архивный файл для поиска дубликатов в дальнейшем.

Принцип работы
Номер генерируется согласно шаблону. Пример шаблона: "606:r4:ca". Шаблон может состоять из любого количества блоков (частей, разделенных двоеточиями), формат блока определяет метод обработки. В данной версии скрипта может быть три метода обработки - копирование, сборка блока из случайных чисел и создание контрольного числа.
Копирование. Это просто перенос блока в будущий номер. Копирование применяется к блокам, которые полностью состоят из чисел, в случае с приведенным примером это будет блок "606". Этот кусок будет копироваться в каждый генерируемый номер.
Сборка блока из случайных чисел. Это действие будет произведено с блоком, начинающимся с литеры "r". Цифра, находящаяся после "r", указывает количество разрядов случайного числа. Блок из примера заставит скрипт создать случайное четырехзначное число.
Создание контрольного числа. Этот метод запускается, если блок начинается с литеры "c". Следующая литера - тип метода. В данный момент это "а" - единственный метод. Суть его работы - реализация вот этого алгоритма:
Восьмая цифра - контрольная.
Контрольным числом - является число, дополняющее под разрядную сумму до ближайшего целого десятка. Если, под разрядная сумма кратна 10, то контрольный знак равен 0. В примере контрольным знаком будет 8.
Номер вагона 7 4 8 5 4 6 8
Множитель 2 1 2 1 2 1 2
Произведение 14 4 16 5 8 6 16
Сумма 1 + 4 + 4 + 1 + 6 + 5 + 8 + 6 + 1 + 6 = 42
Обработке подвергнется собранный на текущем этапе номер, то есть, в приведенном примере контрольное число будет рассчитано на номер 606+4 случайных цифры. Если после этого блока в шаблоне есть ещё какие-нибудь, они учитываться не будут.

После того, как номер сгенерировался, он проходит сверку на дубликаты. Сначала происходит сверка с уже существующими номерами, вписанными в файл ReconciliationFile.csv, потом - проверятся, нет ли совпадения с номерами, созданными в текущей сессии. Если совпадений не обнаружено, номер вписывается в выходной файл. Если же есть совпадение, отмечается провал генерации, номер не сохраняется.
Скрипт будет пытаться генерировать номера до тех пор, пока не будет достигнуто указанное количество номеров либо пока не будет выполнен лимит попыток.
Когда генерирование будет закончено, результат работы будет сохранен в файле numbers.csv и дописан в файл ReconciliationFile.csv.

Использование.
Распакуйте архив в любое место на диске. Единственное ограничение - в пути к папке NumberGenerator не должно быть кириллицы!.
Откройте скрипт Main.lua любым текстовым редактором. Впишите свой шаблон, количество требуемых номеров и количество разрешенных попыток генерирования:
Изображение
Сохраните изменения.
Запустите выполнение скрипта, кликнув дважды run.cmd.
Успешный запуск и выполнение скрипта будет отмечен таким окном:
Изображение
В папке Result будет созданный файл numbers.csv со всеми успешно сгенерированными номерами.
В папке Reconciliation в файл ReconciliationFile.csv будут дописаны все успешно сгенерированные номера.
Файл numbers.csv перезаписывается при каждом запуске скрипта!

Пример работы
Если запустить скрипт, указав ему такие параметры:
Код: Выделить всё
Template = "606:r4:ca"
QuantityGenerations = 10
QuantityAttempts = 150
получим такой результат:
Изображение
Как можно увидеть на скриншоте, новые номера дописались в ReconciliationFile.csv и уже будут учитываться в дальнейшем.

Скрипт специально оставляю в исходном виде, на случай если кто-нибудь пожелает его доработать.
Генерирование номеров с содержанием текстовых элементов в текущей версии не предусмотрено.
Правки и усовершенствования буду производить по мере отзывов.

За предоставленный run.cmd благодарю Артема ака dison202.
Скрипт рассчитан на использование в ОС Windows, корректную работу в других ОС не гарантирую!

Что бы увидеть скрытое сообщение Вам необходимо зарегистрироваться и войти на форум официально
Последний раз редактировалось Света 05.05.2018, 17:46, всего редактировалось 1 раз.

Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
2 комментариев 2994 просмотров
Комментарии

Re: Генератор номеров ПС

Постоянная ссылка BooYa 07.11.2018, 01:24

Необходимо доработать скрипт на создание рандомного числа первого порядка, с ограничением по конкретной цифре.
К примеру, у грузовых это седьмая цифра номера:
Седьмая цифра номера вагона несет информацию о наличии у него переходной площадки (0-8 – без тормозной площадки, 9 – с тормозной площадкой).

То есть, нужен блок для создания рандомного числа от 0 до 9, с введением ограничения по конкретной цифре. В данном случае нам нужен блок r1 с ограничением до 8.
Ограничение по конкретной цифре будет удобнее, т.к. у локомотивов, пассажирских и иных вагонов могут быть подобные правила формирования номера, и этот блок будет универсальным, для любых номеров.
Последний раз редактировалось BooYa 07.11.2018, 01:26, всего редактировалось 1 раз.
Аватара пользователя
BooYa
 
Сообщения: 2579
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Андрей
Блог: Просмотр блога (0)

Re: Генератор номеров ПС

Постоянная ссылка Света 07.11.2018, 08:52

Не вопрос, допишу такой блок, только надо придумать, как его обозначать в шаблоне :)
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 489
Зарегистрирован: 18.06.2016, 19:38
Играю в: Train Simulator 2018
Роль: Разработчик
Блог: Просмотр блога (7)

Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot]