Алгоритм: как создать 2 массива слайдеров, избегая повторений - PullRequest
0 голосов
/ 31 марта 2020

Поиск алгоритма, возможно похожего на «скользящее окно».

// Given that array.
$elementsToShow = ['A', 'B', 'D', 'E', 'F', 'G'];

// Generate 2 differents arrays.
$slider1 = ['A', 'B', 'D', 'E', 'F', 'G'];
$slider2 = ['B', 'D', 'E', 'F', 'G', 'A'];

Они будут показаны одновременно.

$ slider1 начинает показывать 'A' и будет переходите к элементу nexts каждые 14 секунд. $ slider2 начинает показывать 'B' и будет меняться на свой элемент nexts каждые 10 секунд.

Через 60 секунд. $ slider2 завершил свои элементы и начал снова со своего первого элемента 'B'.

Через некоторое время. Элемент, показанный в $ slider1 и $ slider2, будет одинаковым.

Как этого избежать?

Что я хочу знать, если есть какой-либо известный алгоритм для этого или аналогичного ...

Наличие списка элементов ($elementsToShow) Наличие «мест», где отображается разная длительность «на элемент». Генерируйте $silder1 и $slider2 таким образом, чтобы одно и то же значение элемента никогда не отображалось в двух местах одновременно.

Что-то вроде:

// Valid examples.

$slider1 = ['A', 'B', 'D', 'E', 'F', 'G'];
$slider2 = ['B', 'D', 'E', 'F', 'G', 'A', 'B', 'D', 'E'];
$slider2 = ['B', 'D', 'E', 'F', 'G', 'A', 'B', 'A', 'C'];

// Non valid examples.

$slider1 = ['A', 'B', 'D', 'E', 'F', 'G'];
$slider2 = ['B', 'D', 'E', 'F', 'G', 'A', 'A', 'B', 'B'];

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

Спасибо за чтение; P

Ответ на вопрос Vivek:

Исполнение будет «одновременно», но в другом месте. На данный момент мне нужно только создать массивы (данные ползунков).

Этот массив будет использоваться в другом месте, к которому я не могу прикоснуться. Поэтому единственное, что я могу сделать, чтобы избежать дублирования, это построить массивы в последовательности, которая не будет иметь дубликатов.

Если я рисую «временную шкалу», где ось Y - это секунды, а по оси X - «Первый» Выход и второй выход:

В другом примере:

elements = A,B,C,D,E
First output durations: 2 seconds
Second output duration: 3 seconds
+----+-----+-----+-------+
|Secs| 1th | 2nd |Problem|
+----+-----+-----+-------+
|  01|  B  |  A  |       |
|  02|  B  |  A  |       |
|  03|  C  |  A  |       |
|  04|  C  |  B  |       |
|  05|  D  |  B  |       |
|  06|  D  |  B  |       |
|  07|  E  |  C  |       |
|  08|  E  |  C  |       |
|  09|  A  |  C  |       |
|  10|  A  |  D  |       |
|  11|  B  |  D  |       |
|  12|  B  |  D  |       |
|  13|  C  |  E  |       |
|  14|  C  |  E  |       |
|  15|  D  |  E  |       |
|  16|  D  |  A  |       |
|  17|  E  |  A  |       |
|  18|  E  |  A  |       |
|  19|  A  |  B  |       |
|  20|  A  |  B  |       |
|  21|  B  |  B  | XXX   |
|  23|  B  |  C  |       |
|  24|  C  |  C  | XXX   |
|  25|  C  |  C  | XXX   |
|  26|  D  |  D  | XXX   |
|  22|  D  |  D  | XXX   |
|  22|  E  |  D  |       |
|  22|  E  |  E  | XXX   |
+----+-----+-----+-------+

Проблема в XXX: на временной шкале, когда время выполнения достигает 21,24,25, время выполнения 2 выхода показывают одинаковые значения.

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

...