Есть N контейнеров. У каждого контейнера есть требования к температуре перевозки. Требования задаются диапазоном, границы которого являются целыми числами от -100 до 100.
Перевозка контейнеров осуществляется с помощью специальных грузовиков с термостатами. Каждый термостат можно настроить на одну фиксированную температуру от -100 до 100.
Масса и габариты контейнеров, а также вместимость и грузоподъемность грузовиков в задаче не учитывается - то есть, в один грузовик можно погрузить неограниченное количество контейнеров.
Нужно определить минимальное количество грузовиков, с помощью которых можно перевезти заданный набор грузов, не нарушая их температурный режим. Решение выведите в виде списка машин, с указанием в какой машине какой температурный режим следует установить, и какие контейнеры загрузить.

МЕНЯ ИНТЕРЕСУЕТ РЕШЕНИЕ ЗАДАЧИ ЗАПРОСОМ. БЕЗ ПОСТОБРАБОТКИ.

Пример
Входные данные:
Номер Нижняя граница Верхняя граница
1 -50 -25
2 0 10
3 10 15
4 0 50
5 -25 -25
6 -25 10
7 70 100

Результат:
Номер Температура Контейнеры
1 10 2, 3, 4
2 -25 1, 5, 6
3 70 7
---
Подкорректировал первое решение

```1c
    // Данные

    ВЫБРАТЬ Т.Номер, Т.НижТемп, Т.ВерхТемп
    Поместить Данные
    из &Т как Т
    ;

    // Выражение2

    ВЫБРАТЬ
    Т.Номер КАК Номер,
    Т2.Номер КАК Номер2,
    Т.НижТемп КАК НижТемп,
    Т.ВерхТемп КАК ВерхТемп
    ПОМЕСТИТЬ Наборы
    ИЗ
    Данные КАК Т
    ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Т2
    ПО (Т2.НижТемп <= Т.ВерхТемп)
    И (Т2.ВерхТемп >= Т.НижТемп);

    // Наборы

    ВЫБРАТЬ
    МИНИМУМ(Т.ВерхТемп) КАК ВерхТемп,
    Т.Номер2 КАК Номер
    ИЗ
    Наборы КАК Т

    СГРУППИРОВАТЬ ПО
    Т.Номер2

    УПОРЯДОЧИТЬ ПО
    ВерхТемп;
```
---
А в чем проблема?
В первом цикле обходим таблицу с входными данными и для каждой строки во вложенном цикле проверяем остальные строки таблицы. Если подходящая строка, записываем ее в результат.
---
А в чем проблема? Судя по размеру вознаграждения - в готовом коде. ;)
---
Создаем таблицу значений с колонками КоличествоПересечений и МассивНомеровКонтейнеров. Количество строк ТЗ соответствует максимальному диапазону температуры – 201. Для каждого контейнера обходим ТЗ в соответствии с температурным диапазоном, добавляя 1 к КоличествоПересечений и добавляя номер контейнера в МассивНомеровКонтейнеров. Сортируем ТЗ по КоличествоПересечений по убыванию. Первая строка ТЗ – будет первой строкой результата. Исключаем из искомого массива контейнеров контейнеры из первой строки ТЗ. Повторяем всё для оставшихся контейнеров и так далее в рекурсии.
---
Держи запрос:

```1c
    // Данные

    ВЫБРАТЬ Т.Номер, Т.НижТемп, Т.ВерхТемп
    Поместить Данные
    из &Т как Т
    ;

    // Выражение2

    ВЫБРАТЬ
    Т.Номер КАК Номер,
    Т2.Номер КАК Номер2,
    Т.НижТемп КАК НижТемп,
    Т.ВерхТемп КАК ВерхТемп
    Поместить Наборы
    ИЗ
    Данные КАК Т
    ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Т2
    ПО (Т2.НижТемп <= Т.ВерхТемп
    И Т2.ВерхТемп >= Т.НижТемп
    ИЛИ Т.НижТемп <= Т2.ВерхТемп
    И Т.ВерхТемп >= Т2.НижТемп)
    ;

    // Наборы

    ВЫБРАТЬ
    МИНИМУМ(Т.ВерхТемп) КАК ВерхТемп,
    Т.Номер2 КАК Номер
    ИЗ
    Наборы КАК Т

    СГРУППИРОВАТЬ ПО
    Т.Номер2

    УПОРЯДОЧИТЬ ПО
    ВерхТемп;
```
---
Изящное решение,
---
Кстати вот это условие
```1c
    (Т2.НижТемп <= Т.ВерхТемп
    И Т2.ВерхТемп >= Т.НижТемп
    ИЛИ Т.НижТемп <= Т2.ВерхТемп
    И Т.ВерхТемп >= Т2.НижТемп)
```
 нифига не понял, одно и тоже условие но через ИЛИ..при том если убрать одну половину соединение как то не так отрабатывает...
Опять же вот это работает

```1c
    ВЫБРАТЬ
    Т.Номер КАК Номер,
    Т2.Номер КАК Номер2,
    ВЫБОР
    КОГДА Т.ВерхТемп >=Т2.НижТемп
    И Т.НижТемп <= Т2.ВерхТемп
    ТОГДА Т.НижТемп

    ИНАЧЕ Т2.НижТемп
    КОНЕЦ КАК Темп
    ПОМЕСТИТЬ Данные
    ИЗ
    ВТ_Таблица КАК Т
    , ВТ_Таблица КАК Т2
```

Но если тут сделать полное или левое соединение по

```1c
    Т.Номер >= Т2.Номер
```
 Оно перестает работать, хотя и должно...глюки какие то
---
ИЛИ необходимо, чтобы отработать 2 варианта:
1) промежуток Т ниже и имеет общие точки с Т2
2) промежуток Т выше и имеет общие точки с Т2

а далее можно группировать, как по МИНИМУМ(Т.ВерхТемп), так и по МАКСИМУМ(Т.НижТемп),
то есть получаем 2 решения
---
Так варианты абсолютно идентичные
вот так работает

```1c
    ПО ( Т.НижТемп <= Т2.ВерхТемп
    И Т.ВерхТемп >= Т2.НижТемп
    ИЛИ Т.НижТемп <= Т2.ВерхТемп
    И Т.ВерхТемп >= Т2.НижТемп)
```

Убираем одну половину...не работает тут условие ИЛИ т.е.или первое условие верно или второе, но условия одинаковые ???

И кстати вот это условие отрабатывает и одно без ИЛИ, тут просто соединяем ПО если Т входит в Диапазон Т2

```1c
    ПО ( Т.ВерхТемп <= Т2.ВерхТемп
    И Т.НижТемп >= Т2.НижТемп)
```

На выходе получим тоже самое
---
условия не одинаковые

```1c
    ПО (Т2.НижТемп <= Т.ВерхТемп
    И Т2.ВерхТемп >= Т.НижТемп
```

во втором Т и Т2 меняются местами

```1c
    ИЛИ Т.НижТемп <= Т2.ВерхТемп
    И Т.ВерхТемп >= Т2.НижТемп)
```
---
Можно и не менять, результат не изменится, да и в условии какая разница кто первый стоит
Вот это

```1c
    Т2.НижТемп <= Т.ВерхТемп
```
 И
```1c
    Т.ВерхТемп >= Т2.НижТемп
```

От этого условие не станет другим, так как 1<=2 И 2>=1 дадут одинаковый результат истину

Я уже весь мозг свернул
А чем тогда эти условия отличаться, результат от вашего не меняется....но блин нужно это второе ИЛИ, тут что то не так соединение именно отрабатывает

```1c
    ПО Т.НижТемп <= Т2.ВерхТемп
    И Т.ВерхТемп >= Т2.НижТемп
    ИЛИ Т.НижТемп <= Т2.ВерхТемп
    И Т.ВерхТемп >= Т2.НижТемп
```

Ну тут явно какой то косяк, может это файловый вариант так работает, нужно на SQL попробовать, но это на работе только...смогу проверить
---
1<=2 И 2>=1
не совсем так, правильнее x1 <= x2 или x2 <= x1
переменные меняем местами а знак не меняем
---
Хорошо это же ваши условия ?

```1c
    Т2.НижТемп <= Т.ВерхТемп
```
 т.е x2<=x1

```1c
    ИЛИ
```

```1c
    Т.ВерхТемп >= Т2.НижТемп
```
 т.е. х1>=x2

е совсем так, правильнее x1 <= x2 или x2 <= x1
А вот этого нету в ваших условиях как впрочем и у меня
---
Вы правы, вторая часть повторяет первую. А я и не заметил)))
Кстати, закомментировал, вторую часть и решение не изменилось, получил тот же результат

```1c
    ВЫБРАТЬ
    Т.Номер КАК Номер,
    Т2.Номер КАК Номер2,
    Т.НижТемп КАК НижТемп,
    Т.ВерхТемп КАК ВерхТемп
    ПОМЕСТИТЬ Наборы
    ИЗ
    Данные КАК Т
    ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Т2
    ПО (Т2.НижТемп <= Т.ВерхТемп
    И Т2.ВерхТемп >= Т.НижТемп
    //ИЛИ Т.НижТемп <= Т2.ВерхТемп
    // И Т.ВерхТемп >= Т2.НижТемп
    );
```
---
Воот, а у меня при таком, почему то последняя строка 7 где от 70 до 100, не соединяется, значит все таки глюк
У вас Файловый вариант или SQL ?
---
SQL
я к рабочему серверу подключился, там проверил
---
Значит это глюки файлового варианта...да уж, не часто на нем запросы отрабатываю...не знал про такие косяки...
---
Подкорректировал первое решение

```1c
    // Данные

    ВЫБРАТЬ Т.Номер, Т.НижТемп, Т.ВерхТемп
    Поместить Данные
    из &Т как Т
    ;

    // Выражение2

    ВЫБРАТЬ
    Т.Номер КАК Номер,
    Т2.Номер КАК Номер2,
    Т.НижТемп КАК НижТемп,
    Т.ВерхТемп КАК ВерхТемп
    ПОМЕСТИТЬ Наборы
    ИЗ
    Данные КАК Т
    ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Т2
    ПО (Т2.НижТемп <= Т.ВерхТемп)
    И (Т2.ВерхТемп >= Т.НижТемп);

    // Наборы

    ВЫБРАТЬ
    МИНИМУМ(Т.ВерхТемп) КАК ВерхТемп,
    Т.Номер2 КАК Номер
    ИЗ
    Наборы КАК Т

    СГРУППИРОВАТЬ ПО
    Т.Номер2

    УПОРЯДОЧИТЬ ПО
    ВерхТемп;
```
---
Почему 6-й контейнер перевозится при -25, не при 10?
---
Он в принципе входит в 2 диапазона, поэтому решение может быть и немного другим
---
Эх студенты, видать задачка на собеседование
Держите по быстрому набросал
---
https://infostart.ru/1c/articles/551583/

 скажите максимальное количество контейнеров.
---
В обработке я и сам уже сделал решение. Меня интересует решение запросом.
---
на совсем понял условия

контейнеры с разными диапазонами

 могут присутствовать на одном грузовике

но в разных термостатах ?
---
Приветствую. В (22) пробовал такую комбинацию входных параметров контейнеров :
1к [0 ; 10]
2к [10 ; 15]
3к [0 ; 50]
4к [-25 ; 10]
5к [15 ; 50]
6к [15 ; 70]
7к [2 ; 5]

Получил распределение :
 5 - 4,7,1,3
10 - 2
15 - 5,6

Что не верно, т.к. 2-й контейнер по хорошему тоже должен в 15 относиться. Думаю проблема в том, по какой температуре считаем агрегатную функцию. Наверно получить правильный ответ только запросом тут не получится.