SPINTAX+. Новые возможности, все комбинации

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Реакции
4 652
Баллы
113
upd 25.02.2018 04:48 - Добавлен проект по генерации одного случайного варианта. Доработано экранирование спец. символов.

Привет! Зная, как обитатели этого форума любят всевозможную уникализацию, решил поделиться с вами своим расширенным spintax'ом. В своё время я написал его ради интереса без необходимости в практическом применении, поэтому вчерашний день был потрачен, чтобы отряхнуть его от пыли и одеть в новый пиджачок.

Что нового?
  • Шаблон генерирует все возможные комбинации. Наверно, это самое важное. Полученный список уникален, а, значит, вероятность отработать один и тот же текст равна нулю.
  • Настройка количества слов при перестановках. Пока непонятно, подробнее будет ниже на примерах. Важность сравнима с первым пунктом.
  • Возможность использовать несколько разделителей, за счёт чего можно получить разные конструкции слов.


А теперь подробнее.

Генерация всех возможных комбинаций

Для этого достаточно выбрать разделитель во входных настройках и заполнить поле "Исходный текст".
scr-png.27597

Полученные варианты текста с заданным разделителем сохранятся в соответствующий файл в папке с шаблоном.


Количество слов в перестановках

Синтаксис расширенного spintax'а, думаю, вы все уже знаете(ссылка для тех, кто не знает). Я старался от него не отдалятся.
Пример:

[*1-2*+ +отличный|замечательный|великолепный|чудесный|несравненный|потрясающий]

*1-2* - количество слов в комбинации от 1го до 2х включительно. Параметр необязателен, при его отсутствии шаблон будет работать на максимальном числе слов.
+ + - в качестве 1го (в данном случае и единственного) разделителя выступает пробел.

Что в итоге?
В итоге мы получаем в сумме 36 вариантов с одним и двумя словами

потрясающий отличный
несравненный потрясающий
несравненный
великолепный несравненный
чудесный замечательный

...

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


Несколько разделителей

Как я писал выше, очень ситуативная вещь эти разделители, но описать всё равно нужно. Сделаем это на примере.
[*2-6*+ и ++, ++, а также +красный|синий|чёрный|белый|зелёный|фиолетовый]
+ и + - разделитель между словами.
+, + - разделитель между группами слов.
+, а также + - разделитель для последнего слова. Работает только при нечётном количестве слов. Минимальное количество 3.

Какие конструкции имеем итоге?

красный и синий
красный и синий, а также чёрный
красный и чёрный, белый и фиолетовый
красный и белый, чёрный и зелёный, а также фиолетовый
фиолетовый и красный, синий и зелёный, чёрный и белый
...


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


Экранирование

Спецсимволы "{", "[", "|", "]", "}", не участвующие в spintax'е, нужно экранировать: "\{", "\[", "\|", "\]", "\}". Если они уже заэкранированы и на выходе должны оставаться такими - следует добавить ещё слэш: "\\{", "\\[", "\\|", "\\]", "\\}"

Например, на входе: {1|\[\{2\|3\}\]}
На выходе:

1
[{2|3}]

На входе: {1|\\[\{2\|3\}\\]}
На выходе:
1
\[{2|3}\]

Спецсимвол "+" нужно экранировать только в разделителях.


Код был полностью переписан, алгоритмы изменены. Тесты удачные, но вдруг что не так - пишите.

И последнее. Комбинаторика может быть коварной. На одном числе слов шаб отрабатывает несколько секунд, вы решаете докинуть ещё несколько слов, вот только число комбинаций растёт в геометрической прогрессии и секунды могут превратиться в часы)
 
Номер конкурса шаблонов
  1. Первый конкурс шаблонов
Уровень сложности
Продвинутый
Категория
  1. Другое

Вложения

Последнее редактирование:
4 вопроса:
1. Это получается расширенный вариант расширенного спинтакса с темже синтаксисом?
2. Можно по-подробнее про разделитель?
3. Есть ли возможность случайного отключения блоков? В том смысле, чтобы слово или словосочетание или фраза, случайным образом не показывались, просто опускались?
4. Как это все подрубить к своему шабу? Не вижу переменную на входе.
Спасибо.
 
4 вопроса:
1. Это получается расширенный вариант расширенного спинтакса с темже синтаксисом?
2. Можно по-подробнее про разделитель?
3. Есть ли возможность случайного отключения блоков? В том смысле, чтобы слово или словосочетание или фраза, случайным образом не показывались, просто опускались?
4. Как это все подрубить к своему шабу? Не вижу переменную на входе.
Спасибо.
1. Синтаксис тот же с дополнением.
2. Вставь пример с разделителями в шаблон и посмотри, что сгенерирует. Я просто не знаю, что именно непонятно, может есь более конкретный вопрос?
3. Не понял. На примере бы увидеть.
4. Это шаблон по генерации списка всех вариантов. Генерируешь список, подставляешь в свой шаб и работаешь с ним. Для генерации случайного варианта алгоритмы нужно менять. Может займусь этим позже
 
doc, вот пример: http://xbb.uz/randomizator/text.bb Там есть возможность опускать часть текста, чего нет у зенки.
Можно это как-то реализовать?

Подставлять список неудобно, хороший текст генерится из кучи разных блоков, которые меняются, дополняются, заново рандомятся в зависимости от параметров сайта или еще чего. Нужно, чтобы твой кубик вставал в любое место, получал на вход переменную и отдавал тоже переменную, но уже обработанную. Вот это будет то, что нужно. Можно так?
 
  • Спасибо
Реакции: Dr.Pipetka
doc, вот пример: http://xbb.uz/randomizator/text.bb Там есть возможность опускать часть текста, чего нет у зенки.
Можно это как-то реализовать?
если ты об это {|text}, то эта конструкция работает

Подставлять список неудобно, хороший текст генерится из кучи разных блоков, которые меняются, дополняются, заново рандомятся в зависимости от параметров сайта или еще чего. Нужно, чтобы твой кубик вставал в любое место, получал на вход переменную и отдавал тоже переменную, но уже обработанную. Вот это будет то, что нужно. Можно так?
будет позже. Но такой подход будет давать шанс использовать один и тот же текст повторно
 
Если переменная почистится, то каким образом будет повтор в следующем блоке?
Если внутри кубика, то при полной поддержке расширенного спинтакса повтор практически исключен, там рандомится очень много вариантов.
 
Если переменная почистится, то каким образом будет повтор в следующем блоке?
Если внутри кубика, то при полной поддержке расширенного спинтакса повтор практически исключен, там рандомится очень много вариантов.
неисповедимы пути рандома. "Парадокс дней рождение" заставляет на это посмотреть с другой стороны
 
рандом и комбинаторика это разные вещи
вы вообще о чём речь ведёте ?

@doc я шаблон не открывал но читая пост я понял что ты пытался сделать комбинаторику, но спинтакс это не комбинаторика
комбинаторика это где одно слово ни разу не повторяется
 
пример того что недавно человек на форуме хотел
из 12 месяцев собрать строки по три слова без повтора во всех строках
вот это комбинаторика

а такого рандома миллиард можно нахирачить
 
рандом и комбинаторика это разные вещи
вы вообще о чём речь ведёте ?

@doc я шаблон не открывал но читая пост я понял что ты пытался сделать комбинаторику, но спинтакс это не комбинаторика
комбинаторика это где одно слово ни разу не повторяется
Прежде чем утверждать что-то, стоит просто попробовать) Особенно когда это так доступно
Всего секунда затрат, а сколько пользы
 
Чтобы не выглядеть глупо, прежде чем утверждать что-то, стоит просто попробовать) Особенно когда это так доступно
Всего секунда затрат, а сколько пользы

а для чего пробывать ?
только если ты речь ведёшь о спинтаксе и показываешь результат в посте то это не комбинаторика
если в шабе у тебя вообще другое так может я грузить не хочу его а ты объясняешь скрытное

если секунда, покажи мне результат 12 месяцев по три слова
 
а для чего пробывать ?
только если ты речь ведёшь о спинтаксе и показываешь результат в посте то это не комбинаторика
если в шабе у тебя вообще другое так может я грузить не хочу его а ты объясняешь скрытное

если секунда, покажи мне результат 12 месяцев по три слова
Действительно, для чего пробовать. Лучше сказать что-то необоснованно)
Что же, ничего кроме как дать слово, что там есть алгоритмы комбинаторики, я ничего дать тебе не могу (при условии, что запустить шаблон на простом примере ты не хочешь)
 
вот например у меня код отрабатывает за секунды, из 10 месяцев всевозможные комбинации по три слова в строку, 11 так и не смог дождаться, жрёт проц мало

2018-02-25_083509.png


ты бы хоть скрин показал результата
 
вот например у меня код отрабатывает за секунды, из 10 месяцев всевозможные комбинации по три слова в строку, 11 так и не смог дождаться, жрёт проц мало

Посмотреть вложение 27606

ты бы хоть скрин показал результата
Пожалуйста)
23-png.27607


22-png.27608


Достаточно быстро выполнился?)
 

Вложения

  • 23.png
    23.png
    22,3 KB · Просмотры: 8 407
  • 22.png
    22.png
    16 KB · Просмотры: 8 217

немного не правильно сказал, из 10 месяцев я смог собрать в строку по 10 всевозможные комбинации а из 11-ти нет, но что я просил у тебя не спорю всё верно предоставил, тут моя ошибка изначально не правильно высказал

я не отпираюсь поверь, есть ветка даже где мы это обсуждали и экспериментировали, ты свой пробывал из 11 собрать ?
 
немного не правильно сказал, из 10 месяцев я смог собрать в строку по 10 всевозможные комбинации а из 11-ти нет, но что я просил у тебя не спорю всё верно предоставил, тут моя ошибка изначально не правильно высказал

я не отпираюсь поверь, есть ветка даже где мы это обсуждали и экспериментировали, ты свой пробывал из 11 собрать ?
я не думаю, что мне хватит оперативы)
 
я не думаю, что мне хватит оперативы)
я проверял на своих вариантах, если не записывать то во много раз быстрее выполняет
не пробывал с другими колекциями
хотел опробывать с булдером так руки не дошли так как мне оно не надо было, так чисто ради спортивного интереса пробывал )
 
честно открыл шаблон, чёт много кода ?
похож на это , но с охриненым сокращением
Посмотреть вложение 27609
возможно потому, что это не шаблон получения комбинаций последовательности, а несколько большее
я проверял на своих вариантах, если не записывать то во много раз быстрее выполняет
после раскрытия одних фигурных или квадратных скобок из одной строки появляется множество других, каждая из которых в свою очередь даст ещё множество других. Не хранить это дело нельзя
 
вот мой тест на 10, но я с цифрами
2018-02-25_090258.png


неплохо ? ))
 
вот 11 нифига не хочет составить всевозможные комбинации, ресурсов всего примерно %20-25 уходит но это под конец завышается
комп у меня 4 ядра 8 памяти
 
@doc а если текст для спинтакса полон символами "{", "[", "]", "}", как его лучше оформить? Они как то экранируются? Я всегда перед спинтаксом делал замену в тексте, допустим "{" на "~~~" а после обработки назад, а как-то без "костылей" это можно сделать?
 
@doc а если текст для спинтакса полон символами "{", "[", "]", "}", как его лучше оформить? Они как то экранируются? Я всегда перед спинтаксом делал замену в тексте, допустим "{" на "~~~" а после обработки назад, а как-то без "костылей" это можно сделать?
достаточно заэкранировать слэшем. Но на данный момент не предусмотрел |. Отосплюсь и залью правку
 
  • Спасибо
Реакции: Nord
Добавлен проект по генерации одного случайного варианта. Можно использовать как подпроект или просто экшн. Доработано экранирование спец. символов.
 
  • Спасибо
Реакции: udder и Severip
@doc
Привет, скажи пожалуйста, как вот эту конструкцию заставить корректно работать без шарпа?

у меня кубик просто спинтак встроенный,
есть текст к примеру -
Код:
Развернуть Свернуть Копировать
Двери, окна, подоконники, ручки
Как написать спинтакс что бы он рандомно выбирал от 1 до 3 слов? типа двери окна или двери окна ручки ну или одно слово просто подоконники?

почему то вот эта конструкция странно работает - [*1-2*+ +отличный|замечательный|великолепный|чудесный|несравненный|потрясающий]
 
Как проще найти одинаковое в двух выражениях?
А точнее как превратить
Не раздумывайте, спрашивайте подробности!
Не раздумывайте, задавайте нам вопросы!
в
Не раздумывайте, {спрашивайте подробности|задавайте нам вопросы}!


?
 
Как проще найти одинаковое в двух выражениях?
А точнее как превратить
Не раздумывайте, спрашивайте подробности!
Не раздумывайте, задавайте нам вопросы!
в
Не раздумывайте, {спрашивайте подробности|задавайте нам вопросы}!


?
Если предложения всегда одинаковы в начале - сравнивать посимвольно до тех пор, когда символы перестанут совпадать. с места несовпадения выделять подстроки и объединять их в конструкцию спинтакса.
Если предложения разнятся в начале и надо выискивать совпадение где-то в середине - тут всё намного сложнее, и возможный результат гораздо менее надёжный, ибо можно легко загубить смысл предложения
 
Не доделал и занялся основными делами, чтобы день зря не прошёл.

Незаконченный шаблончик у меня делает следующее:
1. То, что я собрал ручками кладёт в список, разделитель точка (в каждую строку кладётся одно предложение).
2. Берёт первое слово какой-нибудь строки в переменную Word.
3. Берёт подсписок, содержащий это слово. Если строк больше 1, начинает обрабатывать подсписок. Если строк не больше 1, кладёт в список Итоги.
4. Удаляет две строки в переменные и вставляет { и |:
Word {...
Word |...
5. Делает так
Если предложения ... всегда одинаковы в начале - сравнивать посимвольно до тех пор, когда символы перестанут совпадать. с места несовпадения выделять подстроки и объединять их в конструкцию спинтакса.
 

Вложения

Последнее редактирование:

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)