Всем доброго дня!
Не могу сообразить: как из таблицы значений получить минимальное значение относительно заданного? Например: имеется количество = 32, из ТЗ (скрин приложен) из колонки Процент нужно получить % = 19, т.е. по нижней границы диапазона. А если, например, количество будет больше 40, т.е. больше предельной величины, то % = 25.
---
Соединения тоже лишние тут, достаточно выборки из одной таблицы.

```1c
    ТЗ = Таблица.Выгрузить();
    НужныйПроцент = 0;
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Таблица.КоличествоУчеников КАК КоличествоУчеников,
    | Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ПОМЕСТИТЬ ВТ_Таблица
    |ИЗ
    | &Таблица КАК Таблица
    |ГДЕ Таблица.КоличествоУчеников <= &КолУчеников
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ ПЕРВЫЕ 1
    | ВТ_Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ИЗ
    | ВТ_Таблица КАК ВТ_Таблица
    |
    |УПОРЯДОЧИТЬ ПО
    | ВТ_Таблица.КоличествоУчеников УБЫВ";
    Запрос.УстановитьПараметр("Таблица", ТЗ);
    Запрос.УстановитьПараметр("КолУчеников", КолУчеников);

    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    НужныйПроцент = Выборка.ПроцентОплаты;
    КонецЕсли;
```
---
Через цикл можно, обходить все и сравнивать.

Через запрос, поместить ТЗ во временную и дальше гонять запросы меняя параметры.
И потом сгруппировать по максимуму и соединиться с изначальной.

Надо замеры провести какой вариант быстрее будет и выбрать его
---
```1c
    ВЫБРАТЬ
    МАКСИМУМ(Таблица.Количество) КАК Количество
    ПОМЕСТИТЬ ВременнаяТаблица
    ИЗ
    Таблица КАК Таблица
    ГДЕ
    Таблица.Количество <= &Количество
    ;

    ВЫБРАТЬ
    Таблица.Процент КАК Процент
    ИЗ
    Таблица КАК Таблица
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица КАК ВременнаяТаблица
    ПО (Таблица.Количество = ВременнаяТаблица.Количество)
```
---
А почему через соединение и ПОМЕСТИТЬ? Можно же как-то так:
```1c
    ВЫБРАТЬ
    Таблица.Количество as Количество
    ,Таблица.Процент КАК Процент
    ИЗ
    Таблица КАК Таблица
    where Таблица.Процент in (ВЫБРАТЬ
    МАКСИМУМ(t.Процент) КАК Процент
    ИЗ Таблица КАК t
    ГДЕ t.Количество <= &Количество)
```
или так:
```1c
    ВЫБРАТЬ
    Таблица.Количество as Количество
    ,Таблица.Процент КАК Процент
    ИЗ
    Таблица КАК Таблица
    where Таблица.Процент in (ВЫБРАТЬ первые 1
    t.Процент КАК Процент
    ИЗ Таблица КАК t
    ГДЕ t.Количество <= &Количество
    order by t.Процент desc)
```
---
Потому что из ТЗ можно выбрать только в ВТ
---
Потому что из ТЗ можно выбрать только в ВТВременная таблица с именем "ВременнаяТаблица" лишняя. В вашем примере ТЗ уже помещена с именем "Таблица".
---
я примеров не писАл :)
Из написанного примера этого не следует, т.к. есть ПОМЕСТИТЬ, значит именно этот запрос к ТЗ.
Про соединение - не знаю зачем оно.
---
Ни чего подобного, "ВременнаяТаблица" выполняет те же функции, что и вложенный запрос в вашем примере.
По моему, так читабельность лучше.
---
А максимум почему ищется по количеству, а не по проценту? Если читабельность выше. :-)
---
Я так задачу понял. Если Процент рассчитан от Количества, то это не имеет значения.
---
Сумма % в примере явно не 100. Примерно, 4 по 20 - это 80.
Явно какой-то другой процент.
---
Я имел ввиду, что зависимость у них прямая.
если Количество1 > Количество2, то Процент1 > Процент2.

Входной параметр задачи - это Количество. Значит и сравнивать нужно с Количеством.
---
И вновь секта свидетелей отправки ТЗ в запрос оживилась.
---
так без запроса думать надо, алгоритмы придумывать......
---
без запроса думать надоСудя по истории постов, сектанты кроме SQL ничего не знают, но мнение имеют.
---
У меня почему-то в обоих предложенных вариантах выскакивает ошибка, хотя "Таблица" заполнена?
---
запрос покажите
---
Потому что приведенный пример - это всего лишь описание направления решения, а не само готовое решение. Для его применения необходимы дополнительные знания.
---
```1c
    Таблица = ТипОбучения.ПроцентыОплаты.Выгрузить();
    Таблица.Сортировать("КоличествоУчеников");

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | МАКСИМУМ(Таблица.КоличествоУчеников) КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВременнаяТаблица
    |ИЗ
    | Таблица КАК Таблица
    |ГДЕ
    | Таблица.КоличествоУчеников <= &КоличествоУчеников
    |;
    |
    |ВЫБРАТЬ
    | Таблица.ПроцентОплатыОплаты КАК ПроцентОплатыОплаты
    |ИЗ
    | Таблица КАК Таблица
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица КАК ВременнаяТаблица
    | ПО (Таблица.КоличествоУчеников = ВременнаяТаблица.КоличествоУчеников)";

    Запрос.УстановитьПараметр("КоличествоУчеников", КолУчеников);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    ПроцентОплаты = Выборка.ПроцентОплаты;
    КонецЦикла;
```
---
Вы не установили и не задали параметр Таблица. И пытаетесь брать данные из неоткуда.
```1c
    Таблица = ТипОбучения.ПроцентыОплаты.Выгрузить();
    Таблица.Сортировать("КоличествоУчеников");

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Таблица", Таблица);
    Запрос.Текст =
    "ВЫБРАТЬ
    | МАКСИМУМ(Таблица.КоличествоУчеников) КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВременнаяТаблица
    |ИЗ
    | &Таблица КАК Таблица
    |ГДЕ
    | Таблица.КоличествоУчеников <= &КоличествоУчеников
    |;
    |
    |ВЫБРАТЬ
    | Таблица.ПроцентОплатыОплаты КАК ПроцентОплатыОплаты
    |ИЗ
    | Таблица КАК Таблица
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица КАК ВременнаяТаблица
    | ПО (Таблица.КоличествоУчеников = ВременнаяТаблица.КоличествоУчеников)";

    Запрос.УстановитьПараметр("КоличествоУчеников", КолУчеников);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    ПроцентОплаты = Выборка.ПроцентОплаты;
    КонецЦикла;
```
---
Я добавил строку Запрос.УстановитьПараметр("Таблица", Таблица); но та же ошибка

Таблица = ТипОбучения.ПроцентыОплаты.Выгрузить();
  Таблица.Сортировать("КоличествоУчеников");

  Запрос = Новый Запрос;
  Запрос.Текст =
  "ВЫБРАТЬ
  | МАКСИМУМ(Таблица.КоличествоУчеников) КАК КоличествоУчеников
  |ПОМЕСТИТЬ ВременнаяТаблица
  |ИЗ
  | Таблица КАК Таблица
  |ГДЕ
  | Таблица.КоличествоУчеников <= &КоличествоУчеников
  |;
        |
  |ВЫБРАТЬ
  | Таблица.ПроцентОплаты КАК ПроцентОплаты
  |ИЗ
  | Таблица КАК Таблица
  | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица КАК ВременнаяТаблица
  | ПО (Таблица.КоличествоУчеников = ВременнаяТаблица.КоличествоУчеников)";

  Запрос.УстановитьПараметр("Таблица", Таблица);
  Запрос.УстановитьПараметр("КоличествоУчеников", КолУчеников);
 РезультатЗапроса = Запрос.Выполнить();
 Выборка = РезультатЗапроса.Выбрать();
---
во второй части запроса так же нужно сделать
```1c
    "ВЫБРАТЬ
    | МАКСИМУМ(Таблица.КоличествоУчеников) КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВременнаяТаблица
    |ИЗ
    | &Таблица КАК Таблица
    |ГДЕ
    | Таблица.КоличествоУчеников <= &КоличествоУчеников
    |;
    |
    |ВЫБРАТЬ
    | Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ИЗ
    | &Таблица КАК Таблица
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВременнаяТаблица КАК ВременнаяТаблица
    | ПО (Таблица.КоличествоУчеников = ВременнаяТаблица.КоличествоУчеников)";
```
---
Я добавил строку Запрос.УстановитьПараметр("Таблица", Таблица); но та же ошибкаВы издеваетесь? Где в тексте запроса учитывается ваш переданный параметр "ИЗ &Таблица"? Если нет, то какая разница сколько и каких параметров вы передали в запрос?
---
Я не издеваюсь, я не программист-профессионал, я самоучка, иногда на "запросах" заклиниваю. Лучше бы написали кодом: какой параметр и куда вставить?
Я пробовал конкретно и Ваш код, тоже не работает, чего-то не хватает.
---
я же вам написал выше. Код ниже скопируйте и вместо своего кода из вставьте (18)
```1c
    Таблица = ТипОбучения.ПроцентыОплаты.Выгрузить();
    Таблица.Сортировать("КоличествоУчеников");

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Таблица", Таблица);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Таблица.КоличествоУчеников КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВременнаяТаблица
    |ИЗ
    | &Таблица КАК Таблица
    |ГДЕ
    | Таблица.КоличествоУчеников <= &КоличествоУчеников
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | МАКСИМУМ(ВременнаяТаблица.КоличествоУчеников) КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВТМаксимум
    |ИЗ
    | ВременнаяТаблица КАК ВременнаяТаблица
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ПОМЕСТИТЬ ВТИтоговая
    |ИЗ
    | &Таблица КАК Таблица
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМаксимум КАК ВТМаксимум
    | ПО Таблица.КоличествоУчеников = ВТМаксимум.КоличествоУчеников
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТИтоговая.ПроцентОплаты КАК ПроцентОплаты
    |ИЗ
    | ВТИтоговая КАК ВТИтоговая";

    Запрос.УстановитьПараметр("КоличествоУчеников", КолУчеников);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    ПроцентОплаты = Выборка.ПроцентОплаты;
    КонецЦикла;
```
---
Таблица.Сортировать("КоличествоУчеников");Сильно.
---
Я сделал вот так:

Теперь ошибка:
---
```1c
    "ВЫБРАТЬ
    | Таблица.КоличествоУчеников КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВременнаяТаблица
    |ИЗ
    | &Таблица КАК Таблица
    |ГДЕ
    | Таблица.КоличествоУчеников <= &КоличествоУчеников
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | МАКСИМУМ(ВременнаяТаблица.КоличествоУчеников) КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВТМаксимум
    |ИЗ
    | ВременнаяТаблица КАК ВременнаяТаблица
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | Таблица.ПроцентОплаты КАК ПроцентОплаты,
    | Таблица.КоличествоУчеников КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВТПроценты
    |ИЗ
    | &Таблица КАК Таблица
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТПроценты.ПроцентОплаты КАК ПроцентОплаты
    |ПОМЕСТИТЬ ВТИтоговая
    |ИЗ
    | ВТПроценты КАК ВТПроценты
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМаксимум КАК ВТМаксимум
    | ПО ВТПроценты.КоличествоУчеников = ВТМаксимум.КоличествоУчеников
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТИтоговая.ПроцентОплаты КАК ПроцентОплаты
    |ИЗ
    | ВТИтоговая КАК ВТИтоговая";
```
---
Теперь другая ошибка, все засунул в обработку.
---
Если у Вас в таблице количество во всех строках разное, то можно через такую конструкцию нужное значение получить
```1c
    Таблица = ТипОбучения.ПроцентыОплаты.Выгрузить();
    ИскомаяСтрока = Таблица.Найти(КолУчеников, "КоличествоУчеников");
    Если Не ИскомаяСтрока = Неопределено Тогда
    ПроцентОплаты = ИскомаяСтрока .ПроцентОплаты;
    КонецЕсли;
```
 . Если есть строки с одинаковым количеством то
```1c
    ИскомаяСтрока = Таблица.НайтиСтроки(Новый Структура("КоличествоУчеников, Ученик", КолУчеников, "Иванов Петров");
    Если Не ИскомаяСтрока.Количество() = 0 Тогда
    ПроцентОплаты = ИскомаяСтрока[0].ПроцентОплаты;
    КонецЕсли;
```
. Попробуйте так, может проще окажется чем с запросами.
---
Вся проблема именно в том, что здесь используется "вилка", т.е. вводимое кол-во может быть между значениями колонки в таблице и % нужно получить по нижней границе.
---
Так Вы в обработке передаете в качестве параметра &Таблица значение, имеющее тип ДанныеФормыКоллекция. Нужно передавать тип ТаблицаЗначений.
---
Исправил.
---
Написано же почему ругается:
```1c
    ВЫБРАТЬ
    | Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ПОМЕСТИТЬ ВТИтоговая
    |ИЗ
    | &Таблица КАК Таблица
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМаксимум КАК ВТМаксимум
    | ПО Таблица.КоличествоУчеников = ВТМаксимум.КоличествоУчеников
```
ТЗ в качестве параметра передали один раз и во временную таблицу засунули один раз. Далее уже работайте с временной таблицей и забудьте про ТЗ.
В момент помещения данных из ТЗ во временную таблицу нельзя использовать соединения.
---
Да, я бестолковый! Безмозглому мозги вставлять - только напрасно время тратить, не получается у меня. Вот обработка, с заполненной таблицей, без кода, мне нужно чтобы она работала. Вознаграждение: 1 $m. Заранее спасибо!
---
С учетом ограничения в 30 строк в таблице максимально, смысла тащить в запрос нет. Обычный цикл.
---
Согласен, но метод нужно осваивать.

```1c
    Таблица = ТипОбучения.ПроцентыОплаты.Выгрузить();
    Таблица.Сортировать("КоличествоУчеников");

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Таблица", Таблица);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Таблица.КоличествоУчеников КАК КоличествоУчеников,
    | Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ПОМЕСТИТЬ ВременнаяТаблица
    |ИЗ
    | &Таблица КАК Таблица
    |ГДЕ
    | Таблица.КоличествоУчеников <= &КоличествоУчеников
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    | МАКСИМУМ(ВременнаяТаблица.КоличествоУчеников) КАК КоличествоУчеников
    |ПОМЕСТИТЬ ВТМаксимум
    |ИЗ
    | ВременнаяТаблица КАК ВременнаяТаблица
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    | Таблица.ПроцентОплаты КАК ПроцентОплаты
    //|ПОМЕСТИТЬ ВТИтоговая
    |ИЗ
    | ВременнаяТаблица КАК Таблица
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТМаксимум КАК ВТМаксимум
    | ПО Таблица.КоличествоУчеников = ВТМаксимум.КоличествоУчеников
    //|;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    //|ВЫБРАТЬ
    //| ВТИтоговая.ПроцентОплаты КАК ПроцентОплаты
    //|ИЗ
    //| ВТИтоговая КАК ВТИтоговая
    |";

    Запрос.УстановитьПараметр("КоличествоУчеников", КолУчеников);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    ПроцентОплаты = Выборка.ПроцентОплаты;
    КонецЦикла;
```
---
Соединения тоже лишние тут, достаточно выборки из одной таблицы.

```1c
    ТЗ = Таблица.Выгрузить();
    НужныйПроцент = 0;
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Таблица.КоличествоУчеников КАК КоличествоУчеников,
    | Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ПОМЕСТИТЬ ВТ_Таблица
    |ИЗ
    | &Таблица КАК Таблица
    |ГДЕ Таблица.КоличествоУчеников <= &КолУчеников
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ ПЕРВЫЕ 1
    | ВТ_Таблица.ПроцентОплаты КАК ПроцентОплаты
    |ИЗ
    | ВТ_Таблица КАК ВТ_Таблица
    |
    |УПОРЯДОЧИТЬ ПО
    | ВТ_Таблица.КоличествоУчеников УБЫВ";
    Запрос.УстановитьПараметр("Таблица", ТЗ);
    Запрос.УстановитьПараметр("КолУчеников", КолУчеников);

    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    НужныйПроцент = Выборка.ПроцентОплаты;
    КонецЕсли;
```
---
Огромное Спасибо!
---
(40) По условию ищется не максимальное количество, а максимальный процент.
Если с максимальным процентом будет две и более строчки?
---
Это где такое условие? По условию нужно из всех количеств найти максимальное, не превышающее заданное. И для этого найденного количества вывести процент.
---
Если с максимальным процентом будет две и более строчки?
Так важно ж значение процентов, а не количество таких значений, не?
---
, (43) Тогда зачем тут запрос городить, если нужно только значение. За один проход ТЗ находится это значение.
Если строки не нужны, то и запрос не нужен.
---
Об этом уже в (2) и (12) было сказано :)
Да даже если и нужны сами строки, то это решается циклами.
Если уж прям совсем заморочится, то самостоятельно организовать сортировку можно.
---
В (37) я привел решение без запроса, собственно об этом и написал, что запрос тут не нужен. Потом в ответ на вариант с запросом ответил, что если уж решать запросом, то можно без всяких соединений и привел вариант с запросом:)
---
Сортировать по колонке "Количество"

затем
нашечисло = 32;

Пока не нашечисло = 0 цикл
нашечисло = нашечисло -1;
стр = ТЗ.Найти(нашечисло , "Количество");
Если не стр = неопределено тогда //нашли! данные в стр
прервать;
КонецЕсли;
КонецЦикла;
---
Ваш вариант не рабочий, т.к. в таблице нет количества = 32!!! В таблице "вилка", где минимальное 30, максимальное 35, а если наше значение = 32, то нужно получить % из строки с количеством 30.
---
В таблице "вилка"Так ищем процент скидки по шкале от количества, что ли?
---
И? цикл выполнится 2 раза, нашечисло станет равно 30 и найдется в таблице.А вилка в картошке
---
Поиск в цикле? Зачем?
А если условно так:
```1c
    МаксКоличество = 32;
    МаксПроцент = -1;
    Для каждого СтрокаТЗ Из ТЗ Цикл
    Если СтрокаТЗ.Количество > МаксКоличество Тогда
    Продолжить;
    КонецЕсли;
    МаксПроцент = Макс(МаксПроцент, СтрокаТЗ.Процент);
    КонецЦикла;
    Сообщить("Максимальный процент: "+ ?(МаксПроцент = -1, "не найден", МаксПроцент));
```
---
затем, что если в тз 1000 строк, то ваш цикл будет выполнен 1000 раз (в худшем случае), а с поиском, до 1-го ближайшего числа
---
У меня один цикл, а не 1000 и алгоритм найдет результат за один проход по не сортированной ТЗ.
Сортировка ТЗ и поиск в ТЗ по вашему выполняется мгновенно?
---
Зависит от размера ТЗ, если десятки тысяч записей, а искомое в конце, с поиском наверно быстрее будет, надо сравнивать, и, конечно, отталкиваться от здравого смысла, работать будет и так и так, кода примерно одинаково
---
Если количество с точностью до третьего знака, то весело будет в цикле искать....
(1) Необходимо просто одно значение по вилке найти или для какой-то табличной части и поиск для каждой строки?
Если для табличной части, то это классический запрос SQL, только в 1С через одно место пишется, но результат будет такой же.
https://onecompiler.com/postgresql/428hhxrku
---
Во-первых: количество Целое (людей считаем поштучно), во-вторых: учащихся в группе больше 50 не бывает, поэтому в таблице максимум 30 строк.
---
А о какой тогда вилке шла речь? Уже просто интересно, что за задача.
---
В таблице есть значения: 26, 30,35, 40 и соответствующие им проценты: 15, 19, 21, 25. Наше кол-во равно 32, нужно получить процент по нижней границе, т.е. "вилка" между 30 и 35. Т.е. наше любое число от 30 по 34 должно получить 19%.
P.S. Задача аналогичная, когда нужно получить процент на доплату за стаж по шкале стажа.
---
У вас одно единственное значение или некая таблица со значениями и для каждого такого значения, необходимо получить %?
---
Одно значение, для которого нужно получить % из таблицы.
---
Если вдруг кому-то придется решать подобную задачу, вот готовый образец-шаблон.
---
С таким рейтингом такие задачи решать... Да... это для 3-го класса на бейсике, еще и код читать не умеете... Вот кому придется решать ТАКИЕ задачи???
---
Иногда бывает "короткое замыкание" и именно на мелочи, даже зная, что элементарное решение в несколько строчек кода, но.... А рейтинг тут совершенно ни при чем.
Эту задачу так же можно решить элементарным циклом в 5 строчек кода, просто в тот день произошло "кз".