Новый алгоритмический язык «Москаль» ⁠ ⁠

Новый алгоритмический язык «Москаль» ⁠ ⁠

Вот, примерно, такой язык программирования. Значит, написал я на нём исходный текст своей шифровальной программы, и вкладку "Забубенить действия" открыл. Выбрал режим "Замутить ЭХЕ код". "Москаль" спросил меня ненавязчиво в виде оконца с тремя кнопками:

СЕЙЧАС БУДУ МУТИТЬ ЭХЕ КОД, ЧЕГО ИЗВОЛИТЕ?

Я ответил "да" на первый вопрос и получил исполняемый файл, которым, и по сей день, пользуются все наши, разведшколовские. Да и дипломаты, порой, не пренебрегают. Кстати, для самых любознательных и пытливых я приведу ниже исходный текст моей программы, вдруг, когда пригодится на чужбине.

ФЕНЕЧКА, ИНПУТСТР, АУТПУТСТР:ТИПАСТРОКА;

КАКБЫ ПОЛУЧИТЬПОФЕНЕ(СТР:ТИПАСТРОКА;ВОБЩЕМ ВТЮХАТЬПОЗ:ФЕНЯ):ТИПАСТРОКА;

ПРИКИНУТЬ ОТСТОЙПОЗ>ДЛИНА(СТР) ТОГДА

ПОЛУЧИТЬ ПО ФЕНЕ:=СКОЗЛИТЬ(СТР,ПОЗ,ОТСТОЙПОЗ-ПОЗ);

ПОЛУЧИТЬ ПО ФЕНЕ:=СКОЗЛИТЬ(СТР,ПОЗ,ОТСТОЙПОЗ-ПОЗ);

ПОКАНАИЗМЕНЕ НЕ КРАЙНЯК(ИНПУТФАЙЛ) ПОРА

ТЕКФЕНЯ:= ПОЛУЧИТЬ ПО ФЕНЕ(ИНПУТСТР,ПОЗ);

ПРИКИНУТЬ ДЛИНА(ТЕКФЕНЯ) <3

ТОГДА АУТПУТСТР:=АУТПУТСТР+ ТЕКФЕНЯ+' ';

ПРИКИНУТЬ ДЛИНА(ТЕКФЕНЯ) =3

ТОГДА АУТПУТСТР:=АУТПУТСТР+ 'быр ';

ПРИКИНУТЬ ДЛИНА(ТЕКФЕНЯ) =4

ТОГДА АУТПУТСТР:=АУТПУТСТР+ 'быр ' +СКОЗЛИТЬ(ТЕКФЕНЯ,4,1)+' ';

ПРИКИНУТЬ ДЛИНА(ТЕКФЕНЯ) =5

ТОГДА АУТПУТСТР:=АУТПУТСТР+ 'ындыр';

ПРИКИНУТЬ (ДЛИНА(ТЕКФЕНЯ) >5) И (ДЛИНА(ТЕКФЕНЯ) <8)

ТОГДА АУТПУТСТР:=АУТПУТСТР+ 'ындыр'+СКОЗЛИТЬ(ТЕКФЕНЯ,6,ДЛИНА(ТЕКФЕНЯ)-5)+ ' ';

ПРИКИНУТЬ ДЛИНА(ТЕКФЕНЯ) =8

ТОГДА АУТПУТСТР:=АУТПУТСТР+ 'ындырбыр';

ПРИКИНУТЬ ДЛИНА(ТЕКФЕНЯ) >8

ТОГДА АУТПУТСТР:=АУТПУТСТР+ 'ындырбыр'+СКОЗЛИТЬ(ТЕКФЕНЯ,9,ДЛИНА(ТЕКФЕНЯ)-8)+ ' ';

Так вот как 1С появилась))

Генератор названия для чего угодно⁠ ⁠

Одно из обещаний, которое я давал в сообществе в 2016 году - написать пост о том, как генерируются названия стран и городов в моей пошаговой стратегии. Вот такие, например:

Я вынес генератор как открытый проект на гитхабе и сейчас расскажу, как им пользоваться. Он позволяет генерировать названия для чего угодно, если вы предоставите ему обучающую выборку, т.е. примеры существующих названий для выведения закономерностей. Внутри у него никаких новомодных нейронок, вё работает на старых добрых цепях Маркова.

Что такое цепи Маркова

Вы, наверное, обращали внимание, что определённые комбинации букв встречаются в словах чаще других. Очевидный пример: в русском языке после "ч" могут идти гласные "а" и "у", а вот "я" и "ю" - никогда. Также некоторые буквы стречаются чаще в конце слов, другие - в начале. Вот, название типичной страны будет, скорее всего, оканчиваться на "ия".

Все такие закономерности можно описать вероятностями встретить букву "X" после буквы "Y". Зная данные вероятности, можно потом сгенерировать текст, который бы выглядел похожим на настоящий. Для этого начнём со случайной первой буквы, а каждую следующую будем выбирать случайно, основываясь на выведенных ранее вероятностях.

Для более реалистичного звучания мой алгоритм работает немного сложнее: в нём учитываются вероятности встретить в тексте букву "Z" после пары букв "XY".

Зависимость результата от обучающей выборки

В зависимоти от предметной области различные комбинации букв будут встречаться с разной вероятностью. Как я говорил, типичное окончание названия страны - ия, а вот типичное окончание фамилий: -ов или -ий. При этом разные зависимости между символами будут в разных языках. В английском много стран оканчиваются на -nd, например. Мой генератор работает с любыми алфавитными языками. Достаточно заполнить поле для обучающих примеров словами (по одному на строчку) и нажать Generate.

Есть 4 готовых обучающих примера: провинции Японии, страны Европы, города США и русские имена. Их можно выбрать для обучения генератора.

Вот примеры сгенерированных названий:

провинции Японии: Hyōtori, Kansaka, Nagate, Ibara, Yama, Chū, Tokka, Shigate

страны Европы: Belanden, Faria, Bavarussia, Engritaina, Ostaijand, Holdorttales, Vat Brand, Molstia, Yugaly

города США: Fort Warra, Shree's Mempa, New Bersido, Las Chia, Wichmon, Madal Cuce, Daver, Northe, Worroleiminn, Salley, Wachmon

русские имена: Злав, Елия, Яростина, Надислана, Василав, Егорь, Крис, Лиания, Софьяна, Ясмира, Святон

Как встроить генератор в свою игру

Добавьте в свой проект класс MarkovGenerator. Создайте генератор и дайте ему обучающую выборку:

Здесь массив learningSamplesAr - это массив строк.

Для генерации нового названия вызовите функцию

Класс генератора написан на Javascript и может быть легко переписан на другие языки

Дополнительные возможности

Если задать в качестве обучающей выборки достаточно длинный текст, то можно получить довольно забавные результаты. Вот что я получил, задав в качестве обучающей выборки данный пост:

Как видите, текст выглядит как русский текст и смешно читается. Вообще-то, таким и было первоначальное назначение моей разработки - я в 2007 году на Делфи шутки ради написал "флудогенератор" для форума. Ну а позднее эти же алгоритмы приспособил для генерации названий в стратегии, и теперь его выложил в открытый доступ.

Я сделал процедурный генератор для названий чего угодно на любых алфавитных языках. Для работы ему нужна обучающая выборка примеров.

Исходники можно взять в свой проект с Гитхаба. Можно просто поиграться. Напишите, что он вам выдаст - интересно!

📎📎📎📎📎📎📎📎📎📎