Имя: Пароль:
1C
1С v8
Нужен алгоритм обработки таблицы значений.
0 Alexor
 
28.11.13
09:54
Всем привет.

Есть таблица с 3 колонками.
в первых двух задан произвольный период, но количество дней не превышает 30 (месяц).
Дата в 3-й колонке должна лежать в интервале из первых двух.

Задача, заполнить 3-ю колонку датой, что бы было как можно меньше разных дат в этой колонке.
Например:
задано:
02.11.13-15.11.13
08.11.13-13.11.13
09.11.13-20.11.13
21.11.13-30.11.13

результат должен быть:
02.11.13-15.11.13    09.11.13
08.11.13-13.11.13    09.11.13
09.11.13-20.11.13    09.11.13
21.11.13-30.11.13    21.11.13

Может кто натолкнет на оптимальный алгоритм, пока что то мысли кроме перебора не лезут.
Если важно, то делаю на платформе 8.2.
1 Alexor
 
28.11.13
09:55
+0 Количество строк в ТЗ произвольно, на рабочем примере около 50.
2 Apokalipsec
 
28.11.13
09:58
Самое простое перебором, хранить предыдущую дату начала как минимум.
3 kiruha
 
28.11.13
10:00
1. Находишь максимальную дату начала
подставляешь везде куда подходишь
2. Вычеркиваешь строки заполненные
3. Переходишь к пункту 1
4 Cube
 
28.11.13
10:01
(2) Не не, самое простое - делать таблицу дат:
Пробегаем по таблице и добавляем каждый день из диапазона в таблицу. Потом сворачиваем, счтитая дни, потом сортируем от большего к меньшему. Ну а потом дело техники...
5 Cube
 
28.11.13
10:02
+(4) Я думаю, даже можно запросом замутить...
6 1Сергей
 
28.11.13
10:02
интересная задачка
7 kiruha
 
28.11.13
10:03
В данном примере
шаг 1
1. 21.11.13
2.вычеркивается только последняя строка
шаг 2
1.09.11.13 - максимум из оставшихся
2.вычеркиваются все строки

Выход из алгоритма
8 1Сергей
 
28.11.13
10:04
я бы сделал цикл по датам от самой ранней до самой поздней и для каждой даты посчитал бы количество периодов, в которые она попадает. Ну, дальше ясно
9 Alexor
 
28.11.13
10:04
(3) Так а как найти максимальную дату начала?

(4) Мммм. Да вариант. наверное оптимальнее всего.
Пробегаю таблицу, в временную таблицу заношу даты из диапазона.
Дальше сворачиваю, сортирую по убыванию.
Пробегаю таблицу еще раз, смотрю какая дата с наибольшим весом подходит в данный диапазон.
10 kiruha
 
28.11.13
10:06
(9)
>>Так а как найти максимальную дату начала

Максимум из колонки 1. Можно перебором - алгоритмов масса
11 Alexor
 
28.11.13
10:06
(7) Понял.
12 Alexor
 
28.11.13
10:07
(10) Спасибо, мне не совсем был понятен смысл (7) все объяснило.
13 Alexor
 
28.11.13
10:08
Попробую оба алгоритма сравню кто лучше даты "сжимает"
14 МихаилМ
 
28.11.13
11:40
если запросом:
найти пересекающиеся интервалы  в интервале пересечения взять серединное значение.
15 1Сергей
 
28.11.13
12:41
(14) почему именно серединное?
16 Михаил Козлов
 
28.11.13
12:55
(15) Можно и "золотое сечение":-)
17 zhig75
 
28.11.13
12:55
Для каждного СтрокаТЧ из Таблицы цикл
Если начальная дата периода >= Начальной дате следующего периода тогда значение = начальная дата периода
Иначе значение = Начальная дата следующего периода
КонецЕсли
КонецЦикла

Не?
18 ILM
 
гуру
28.11.13
12:58
30 дней говоришь?
Заполни таблицу датами, для каждой даты выбери количество попаданий в интервал, отсортируй по убывнию. Дальше удаляй диапазоны в которые входит первая дата, затем вторая и т.д. Если диапазонов не осталось, то набор дат сформирован.