Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Dividir una lista en bloques

Corta una lista en grupos consecutivos de un tamaño fijo, con un último grupo más corto si hace falta.

Lo que aprenderás

  • Recorrer una lista en saltos de tamaño fijo
  • Tomar trozos cuyo último puede ser más corto
  • Agrupar datos para paginar o procesar por lotes

Problema

Ver original (inglés)

Dividir datos en fragmentos de tamaño fijo es cómo los programas paginan resultados, agrupan escrituras en bases de datos o envían datos en paquetes.

Dada una lista y un tamaño de fragmento, corta la lista en fragmentos consecutivos de exactamente size valores, en orden. El último fragmento contiene lo que quede y puede ser más corto.

Implementa split_into_chunks(values, size).

Entrada

values: La lista que se va a dividir.

size: El tamaño del fragmento.

Salida

Devuelve la lista de fragmentos. Una lista vacía no da ningún fragmento.

Restricciones

0 ≤ número de valores ≤ 10,000

1 ≤ size ≤ 10,000

Ejemplos

Ejemplo 1
Entrada:
size = 3
values = [1, 2, 3, 4, 5, 6, 7]

Salida esperada:
expected = [
    [1, 2, 3],
    [4, 5, 6],
    [7]
]
Entrada:
long long size = 3;
std::vector<long long> values = {1, 2, 3, 4, 5, 6, 7};

Salida esperada:
std::vector<std::vector<long long>> expected = {
    {1, 2, 3},
    {4, 5, 6},
    {7}
};
Entrada:
long size = 3;
long[] values = new long[] {1, 2, 3, 4, 5, 6, 7};

Salida esperada:
long[][] expected = new long[][] {
    new long[] {1, 2, 3},
    new long[] {4, 5, 6},
    new long[] {7}
};

Explicación

Grupos de 3: [1, 2, 3] y [4, 5, 6], y el 7 sobrante forma un último bloque más corto.

Ejemplo 2
Entrada:
size = 5
values = [8, 9]

Salida esperada:
expected = [
    [8, 9]
]
Entrada:
long long size = 5;
std::vector<long long> values = {8, 9};

Salida esperada:
std::vector<std::vector<long long>> expected = {
    {8, 9}
};
Entrada:
long size = 5;
long[] values = new long[] {8, 9};

Salida esperada:
long[][] expected = new long[][] {
    new long[] {8, 9}
};

Explicación

El tamaño es mayor que la lista, así que todo cabe en un bloque: [[8, 9]].

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Las posiciones de inicio son 0, size, 2·size, etc.

Pista 2

Toma un trozo desde cada posición de inicio hasta start + size.

Pista 3

El último trozo puede ser más corto, y una lista vacía no da ningún bloque.

Complejidad esperada

tiempo O(n), espacio extra O(n)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.