Перечислите все комбинации строк параметров, следуя порядку предоставленного массива и правилам определенных параметров

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

Я пытаюсь построить каждую комбинацию параметров строки с правилами, которые вы можете найти ниже.

Учитывая массив кодов опций (в конце поста), я должен сгенерировать список всех возможных комбинаций, но они должны следовать порядку, в котором они представлены, и следовать правилам, заданным row_mod. Например, когда код option_ для O находится в комбинациях, код option_on для ON и OP не допускается в комбинации.

Единственная информация row_mod, которой необходимо следовать в настоящее время при построении этих строк, — это «naWithOp ##», поскольку это относится к другой опции, которая не может быть с ней.

Вот некоторые из возможных комбинаций, которые могут понадобиться в сценарии:

  1. OTKZ
  2. ОТК
  3. Ветхий Завет
  4. OTOSZ
  5. OTOS
  6. О
  7. OL
  8. OLKZ
  9. ОЛК

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


Array
(
[0] => Array
(
[option_code] => O
[row_mod] => allowAll naWithOpON naWithOpOP
)

[1] => Array
(
[option_code] => ON
[row_mod] => allowAll naWithOpO naWithOpOP
)

[2] => Array
(
[option_code] => OP
[row_mod] => allowAll naWithOpO naWithOpON
)

[3] => Array
(
[option_code] => T
[row_mod] => allowAll naWithOpL
)

[4] => Array
(
[option_code] => L
[row_mod] => allowAll naWithOpT naWithCoilX
)

[5] => Array
(
[option_code] => K
[row_mod] => allow2 allow3 allow3P naWithOpOS
)

[6] => Array
(
[option_code] => OS
[row_mod] => allow2 allow3 allow3P naWithOpK
)

[7] => Array
(
[option_code] => Z
[row_mod] => allowAll naWithPreB
)

)

По сути, я должен начать с первого кода опции и пройтись по списку, начиная с первого заданного параметра «O», затем перейти к следующему параметру «ON» и проверить, является ли он действительным, и если это так, добавить его в текущую комбинацию. И так далее, и так далее, построение допускает комбинации и сохраняет их в массиве.

Пример пользовательского интерфейса:
Я создал jsfiddle, который интерактивен так, что опции работают вместе. Найденный Вот

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

0

Решение

У вас есть восемь различных опций, которые могут быть использованы либо ноль, либо один раз. Таким образом, «не используется» делает это девять. Так что у тебя есть

  • 9 возможностей для первого варианта,
  • 8 возможностей для второго (поскольку первое не может быть использовано повторно),
  • 7 возможностей для третьего (так как первые два не могут быть использованы повторно)

Тогда ваше основное количество опций, не считая дополнительных правил совместимости опций, составляет 9 !, или 362880 комбинаций.

Вы можете просмотреть все возможные комбинации, а затем написать функцию, чтобы проверить, является ли эта комбинация допустимой, учитывая правила для каждого типа. Только элементы списка, для которых функция возвращает trueи отвергни остальных. Это может быть немного медленно, но это будет работать.

Чтобы сгенерировать эти комбинации, я бы визуализировал последовательность опций в виде 9-значного числа в базе 9 (т. Е. У вас есть 9 вещей, и каждая из них может принимать одно из 9 значений, с учетом ограничений, которые я отмечу ниже). я считать Я правильно сказал, что это 99 (38742048910) различные комбинации, если не было правила, запрещающего использование опции дважды.

Таким образом, просто циклически просматривайте эти числа в базе 9, отклоняйте любые числа, имеющие повторяющиеся цифры, и те, которые проходят через них, преобразуйте их в строку параметров и отклоняйте все, которые не проходят функцию правила для параметров. Список оставленных вами предметов будет полным набором разрешенных комбинаций.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector