Имя: Пароль:
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 подряд идут переносим в конец (пока там очевидно не останутся ролики самой длинной категории), потом распихиваем их куда найдем
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.