Имя: Пароль:
IT
 
Создать массив так чтобы ролики одной категории не шли друг за другом?
0 Ночной Эльф
 
26.07.12
14:56
Имеем таблицу значений в 1с 7.7 (в дальнейшем просто массив) в которой хранятся данные о рекламных роликах. Причем отсортированы они по категории т.е. друг за другом идут ролики из одной категории.
К примеру
Автомобили    ролик1
Автомобили    ролик2
Автомобили    ролик3
Сауны         ролик1
Сауны         ролик2

Имеем также массив в котором хранится количество сколько одна категория встречается в первом массиве, название категории и первый элемент данной категории в первом массиве т.е. откуда начинается данная категория в первом массиве.
К примеру
Автомобили 3 1
Сауны      2 4

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

Необходимо создать массив роликов так чтобы ролики из одной и той же категории не шли друг за другом?
1 Ненавижу 1С
 
гуру
26.07.12
14:59
невозможно, если есть куча маленьких и одна огромная категории
2 Ночной Эльф
 
26.07.12
15:00
еще варианты будут ?
3 Classic
 
26.07.12
15:02
Так (1) же доказал, что это в общем случае невозможно. Какие еще варианты услышать хочешь. Варианты, как реализовать невозможное?
4 Михаил Козлов
 
26.07.12
15:04
(3) Может быть интересует критерий, когда это возможно.
5 Ночной Эльф
 
26.07.12
15:05
(4) да хотел бы услышать когда это возможно?
6 acsent
 
26.07.12
15:06
зачем?
7 Ненавижу 1С
 
гуру
26.07.12
15:10
(5) пусть N - всего элементов и M (M<=N) - элементов в самой большой категории, тогда задача решаема, если M<=[(N+1)/2]

[] - целая часть
8 Classic
 
26.07.12
15:10
(5)
Когда размер самой большой категории - 1 меньше половины общего числа роликов
9 Classic
 
26.07.12
15:11
(7)
Одновременно:)
10 1Сергей
 
26.07.12
15:11
Теперь телеканалы рекламные ролики в 1С сортируют...
11 Ночной Эльф
 
26.07.12
15:14
(7) так оно и есть что M (M<=N) а вот то чтобы меньше половины не факт
12 Ночной Эльф
 
26.07.12
15:14
(10) это не каналы плейлисты
13 Ночной Эльф
 
26.07.12
15:14
для другого
14 Ненавижу 1С
 
гуру
26.07.12
15:15
(11) что не факт? 10 роликов, 2 категории, а одной 2 ролика, в другой 8 - как решить?
15 acsent
 
26.07.12
15:15
вот например во время евро только пиво и виагру рекламировали подряд и никто не парился
16 SUA
 
26.07.12
15:23
ну и метод, если возможно распределение...
отсортируем массив2 по кол-ву роликов,
берем 1ю категорию (самую большую) и составляем итоговый массив "через один" - ролик 1й категории, ролик 2й, ролик 1й, ролик 2й,..., ролик 1й, ролик 3й (когда 2я кат. закончится),итд
когда закончится 1я - оставшиеся ролики каждой из категорий втыкаем в массив сначала "через 1"
17 Ночной Эльф
 
26.07.12
15:35
(16) ага это на словах легко а ты попробуй в коде это
18 Ночной Эльф
 
26.07.12
15:35
+ еще не желательно чтобы категории шли через одну
19 Fedot200
 
26.07.12
15:37
(0) А зачем? Рекламу крутить на табло?
20 МихаилМ
 
26.07.12
15:40
(18)
определитесь польностью с условиями задачи
21 Ночной Эльф
 
26.07.12
15:44
Вобщем то что в (7) полностью удовлетворяет условию так оно и есть получается
22 Ненавижу 1С
 
гуру
26.07.12
15:49
делаем два массива
Массив1 - ролики наибольшей категории, пусть его длина M: индексы от 0 до M-1
Массив2 - ролики остальных категорий, отсортированные по категориям, пусть его длина K=N-M, индексы от 0 до K-1

Разность индексов между соседними элементами Массив1 в результируещем будет:
1. T=N/M, если N делится на M
2. T=Цел(N/M)+1, иначе

РезультирующийМассив[k*T] = Массив1[k], где k=0..M-1
РезультирующийМассив[k*T+h] = Массив2[k*(T-1)+h-1], где k=0..M-1, h=1..T-1
23 Йохохо
 
26.07.12
16:03
ролики надо на окружности еще располагать ;)
24 SUA
 
26.07.12
16:26
(17)легко - именно как написано
а еще можно более тупым методом -
сначала все ролики которые по 2 подряд идут переносим в конец (пока там очевидно не останутся ролики самой длинной категории), потом распихиваем их куда найдем
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший