| 
    
            
         
         | 
    
    
  | 
Нужен алгоритм обработки таблицы значений. | ☑ | ||
|---|---|---|---|---|
| 
    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 дней говоришь?
 
        Заполни таблицу датами, для каждой даты выбери количество попаданий в интервал, отсортируй по убывнию. Дальше удаляй диапазоны в которые входит первая дата, затем вторая и т.д. Если диапазонов не осталось, то набор дат сформирован.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |