Все задачи
Легко Решено: 0 Процент решений: 0%

Разбить список на части

Разрезать список на последовательные группы фиксированного размера, при необходимости с более короткой последней группой.

Чему вы научитесь

  • Проходить список шагами фиксированного размера
  • Брать срезы, последний из которых может быть короче
  • Группировать данные для страниц или пакетов

Условие

Разбиение данных на чанки фиксированного размера — это то, как программы разбивают результаты постранично, пакетно записывают в базу данных или отправляют данные в пакетах.

Дан список и размер чанка, разрежьте список на последовательные чанки ровно из size значений в порядке следования. Последний чанк содержит всё, что осталось, и может быть короче.

Реализуйте split_into_chunks(values, size).

Input

values: Список, который нужно разбить.

size: Размер чанка.

Output

Верните список чанков. Пустой список не даёт чанков.

Ограничения

0 ≤ число значений ≤ 10,000

1 ≤ size ≤ 10,000

Примеры

Пример 1
Ввод:
size = 3
values = [1, 2, 3, 4, 5, 6, 7]

Ожидаемый вывод:
expected = [
    [1, 2, 3],
    [4, 5, 6],
    [7]
]
Ввод:
long long size = 3;
std::vector<long long> values = {1, 2, 3, 4, 5, 6, 7};

Ожидаемый вывод:
std::vector<std::vector<long long>> expected = {
    {1, 2, 3},
    {4, 5, 6},
    {7}
};
Ввод:
long size = 3;
long[] values = new long[] {1, 2, 3, 4, 5, 6, 7};

Ожидаемый вывод:
long[][] expected = new long[][] {
    new long[] {1, 2, 3},
    new long[] {4, 5, 6},
    new long[] {7}
};

Пояснение

Группы по 3: [1, 2, 3] и [4, 5, 6], а оставшаяся 7 образует последний, более короткий чанк.

Пример 2
Ввод:
size = 5
values = [8, 9]

Ожидаемый вывод:
expected = [
    [8, 9]
]
Ввод:
long long size = 5;
std::vector<long long> values = {8, 9};

Ожидаемый вывод:
std::vector<std::vector<long long>> expected = {
    {8, 9}
};
Ввод:
long size = 5;
long[] values = new long[] {8, 9};

Ожидаемый вывод:
long[][] expected = new long[][] {
    new long[] {8, 9}
};

Пояснение

Размер больше, чем список, поэтому всё помещается в один чанк: [[8, 9]].

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Начальные позиции — 0, size, 2·size и так далее.

Подсказка 2

Берите срез от каждой начальной позиции до start + size.

Подсказка 3

Последний срез может быть короче, а пустой список не даёт ни одного куска.

Ожидаемая сложность

время O(n), доп. память O(n)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.