Перестановка слов. Всевозможные варианты. Как?

RipWay

Client
Регистрация
21.11.2013
Сообщения
99
Благодарностей
45
Баллы
18
Приветствую. Каким образом можно сделать перестановку слов по всевозможным комбинациям?

На входе допустим:
январь, февраль, март

На выходе:
январь, февраль, март
январь, март, февраль
февраль, март, январь
февраль, январь, март
март, февраль, январь
март, январь, февраль
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
1. Spintax: https://zennolab.com/wiki/ru:actions:text:extended-spintax
Код:
[+, +январь|февраль|март]
2. Список.
Кладём данные в список с разделителем ",".
Перемешиваем данные, а после объединяем в переменную с разделителем ",".
 
  • Спасибо
Реакции: RipWay

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 438
Благодарностей
9 136
Баллы
113
Приветствую. Каким образом можно сделать перестановку слов по всевозможным комбинациям?

На входе допустим:
январь, февраль, март

На выходе:
январь, февраль, март
январь, март, февраль
февраль, март, январь
февраль, январь, март
март, февраль, январь
март, январь, февраль
перестановки можно делать так:

upload_2018-2-7_22-3-36.png
остается придумать как генерить все возможные комбинации нижней регулярки (На что заменить).. :-)
кто то сейчас подскажет наверняка..
 
  • Спасибо
Реакции: RipWay

RipWay

Client
Регистрация
21.11.2013
Сообщения
99
Благодарностей
45
Баллы
18
перестановки можно делать так:

Посмотреть вложение 26941
остается придумать как генерить все возможные комбинации нижней регулярки (На что заменить).. :-)
кто то сейчас подскажет наверняка..
В этом то и вопрос. Потому как это простой пример, из 3-х переменных. А если их будет к примеру 10?
Я нашел решение на шарпе, но как адаптировать его под зенно, не хватает ума.
https://stackoverflow.com/questions/756055/listing-all-permutations-of-a-string-integer
 

RipWay

Client
Регистрация
21.11.2013
Сообщения
99
Благодарностей
45
Баллы
18
1. Spintax: https://zennolab.com/wiki/ru:actions:text:extended-spintax
Код:
[+, +январь|февраль|март]
2. Список.
Кладём данные в список с разделителем ",".
Перемешиваем данные, а после объединяем в переменную с разделителем ",".
Думал над этим вариантом. Но в моём случае переменных может быть разное кол-во, а spintax не только уникальные значения выдает.
Можно конечно генерировать много раз и потом удалять дубли, но это костыль...
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Думал над этим вариантом. Но в моём случае переменных может быть разное кол-во, а spintax не только уникальные значения выдает.
Можно конечно генерировать много раз и потом удалять дубли, но это костыль...
Я не понял Ваш ответ по Spintax'y.
[+, +январь|февраль|март] - такая конструкция выдаст все значения сразу в случайном порядке через разделитель. Без дублей.
Можно даже положить данные в переменную и использовать такую конструкцию:
[+, +{-Variable.NameVariable-}]


А второй вариант Вам чем не подходит?
 
Последнее редактирование:

RipWay

Client
Регистрация
21.11.2013
Сообщения
99
Благодарностей
45
Баллы
18
Я не понял Ваш ответ по Spintax'y.
[+, +январь|февраль|март] - такая конструкция выдаст все значения сразу в случайном порядке через разделитель. Без дублей.


А второй вариант Вам чем не подходит?
Хорошо, а если у меня будут все 12 месяцев, как мне получить список всех уникальных значений?
Я понимаю что можно нагенерировать очень много комбинаций, и потом удалить дубли. Но мне кажется есть более правильное решение.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
Я не понял Ваш ответ по Spintax'y.
[+, +январь|февраль|март] - такая конструкция выдаст все значения сразу в случайном порядке через разделитель. Без дублей.
Можно даже положить данные в переменную и использовать такую конструкцию:
[+, +{-Variable.NameVariable-}]


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

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Хорошо, а если у меня будут все 12 месяцев, как мне получить список всех уникальных значений?
Я понимаю что можно нагенерировать очень много комбинаций, и потом удалить дубли. Но мне кажется есть более правильное решение.
Извиняюсь, неправильно понял задачу.
Вот пример шаблона, результат работы которого будет записан в список "Комбинации".

Но сразу хочу предупредить, что процесс на большом кол-ве вариаций может занять продолжительное время.
Генерация:
январь, февраль, март
январь, март, февраль
февраль, январь, март
февраль, март, январь
март, февраль, январь
март, январь, февраль

Выполнилась моментально.
А вот прогнать все 12 месяцев не удалось - завис ноутбук :-)
К слову говоря, перестановка 12 элементов - это 479 001 600 комбинаций (если я ничего не перепутал).
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: redman, RipWay и Sergodjan

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
1234 перебрал за секунду, проще каждому месяцу присвоить число, вот только хреново если число двухзначное

2018-02-08_092247.png
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Стало интересно :-)
9 элементов - 362 880 комбинаций - 0.5350306 секунд
10 элементов - 3 628 800 комбинаций - 6.7813879 секунд
11 элементов - 39 916 800 комбинаций - Выдано исключение типа "System.OutOfMemoryException". :D
 
Последнее редактирование:
  • Спасибо
Реакции: Sergodjan

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
12 дохрена )) я не дождался результата, вырубил
 
  • Спасибо
Реакции: Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 438
Благодарностей
9 136
Баллы
113
да ну вас, чуть комп не повис у мну.. :ca:
всю оперативку сожрало.. *HAHA*
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
у меня всего 25% заняло
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 438
Благодарностей
9 136
Баллы
113

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113

RipWay

Client
Регистрация
21.11.2013
Сообщения
99
Благодарностей
45
Баллы
18
Извиняюсь, неправильно понял задачу.
Вот пример шаблона, результат работы которого будет записан в список "Комбинации".

Но сразу хочу предупредить, что процесс на большом кол-ве вариаций может занять продолжительное время.
Генерация:
январь, февраль, март
январь, март, февраль
февраль, январь, март
февраль, март, январь
март, февраль, январь
март, январь, февраль

Выполнилась моментально.
А вот прогнать все 12 месяцев не удалось - завис ноутбук :-)
К слову говоря, перестановка 12 элементов - это 479 001 600 комбинаций (если я ничего не перепутал).
Ооо, супер то что нужно. Спасибо большое, буду разбираться:-)
 

barkasian

Client
Регистрация
03.12.2014
Сообщения
127
Благодарностей
137
Баллы
43
Немного академического подхода к теме ТС (рекурсивный метод):
 
Последнее редактирование:
  • Спасибо
Реакции: TwistDanceR

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 419
Благодарностей
5 454
Баллы
113
Не стоит забывать что в ZennoPoster подобные проекты отрабатывают в разы быстрее чем в ProjectMaker.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
Немного академического подхода к теме ТС (рекурсивный меод):
я в одном своём коде его применял

3-9 чисел, выполнение 0 секунд
10 - чисел = 2 сек
11 чисел = 30 сек
12 чисел = так и не хотит завершать )

P.S. тестировал в РМ
 

toxass

Client
Регистрация
18.03.2010
Сообщения
280
Благодарностей
12
Баллы
18
Извиняюсь, неправильно понял задачу.
Вот пример шаблона, результат работы которого будет записан в список "Комбинации".

Но сразу хочу предупредить, что процесс на большом кол-ве вариаций может занять продолжительное время.
Генерация:
январь, февраль, март
январь, март, февраль
февраль, январь, март
февраль, март, январь
март, февраль, январь
март, январь, февраль

Выполнилась моментально.
А вот прогнать все 12 месяцев не удалось - завис ноутбук :-)
К слову говоря, перестановка 12 элементов - это 479 001 600 комбинаций (если я ничего не перепутал).

Не работает шаблон на версии 5.10.3.1 - в чем может быть проблема, помогите плз.
 

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