Saltar al contenido
#239 chunk-tuple · par 4

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 239 · 22 de agosto de 2026 · Difícil

    Trocea

    Implementa `Chunk<T, N>` para que divida una tupla en grupos de `N`. Un grupo final más pequeño que `N` se conserva tal cual.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    chunk-tuple.ts
    Intento 1 de 4Aún sin comprobar

    Sustituye ??? — tu solución se comprueba con los casos de abajo. Tab indenta; pulsa Escape y luego Tab para sacar el foco.

    Comprobaciones

    4
    • Chunk<[1, 2, 3], 2>
      [[1, 2], [3]]
    • Chunk<[1, 2, 3, 4], 2>
      [[1, 2], [3, 4]]
    • Chunk<[], 3>
      []
    • Chunk<[1, 2], 5>
      [[1, 2]]

    Cómo se juzga una comprobación Igualdad exacta de tipos, no asignabilidad — una intersección no es lo mismo que el objeto aplanado.

    Cómo le fue a todo el mundo

    Menos de 5 personas han resuelto este puzle hasta ahora. La distribución aparece cuando la muestra sea lo bastante grande como para significar algo.

    Juego corto

    Menos caracteres

    Aún no hay marcas públicas.

    Archivo
    02

    Solución comentada

    Publicado el 23 de agosto de 2026

    La solución

    type Chunk<
      T extends readonly unknown[],
      N extends number,
      Acc extends unknown[] = [],
    > = Acc['length'] extends N
      ? [Acc, ...Chunk<T, N>]
      : T extends readonly [infer H, ...infer R]
        ? Chunk<R, N, [...Acc, H]>
        : Acc extends []
          ? []
          : [Acc]

    El error más común

    type Chunk<
      T extends readonly unknown[],
      N extends number,
      Acc extends unknown[] = [],
    > = Acc['length'] extends N
      ? [Acc, ...Chunk<T, N>]
      : T extends readonly [infer H, ...infer R]
        ? Chunk<R, N, [...Acc, H]>
        : [Acc]

    Casi correcto, y erróneo justo donde más cuesta verlo. Sin la guarda `Acc extends []`, la entrada vacía produce `[[]]` — una tupla con un grupo vacío — en vez de `[]`. Una entrada divisible exacta cae en la misma rama y gana un grupo vacío al final.

    Línea por línea

    1. Acc['length'] extends N

      La prueba de grupo lleno va primero, antes de examinar la entrada. Alcanzar `N` emite el grupo y reinicia con el acumulador vacío por defecto, porque `Chunk<T, N>` omite el tercer argumento.

    2. Acc extends [] ? [] : [Acc]

      La entrada se agotó. O el último grupo está vacío — el anterior cerró justo en el límite y no queda nada que emitir — o contiene un grupo final corto que sí pertenece al resultado.

    Para recordar

    Las recursiones con dos salidas necesitan probar ambas. El caso límite en que la entrada se divide exacta es el que se escapa, y es justo el que un ejemplo escrito a mano suele evitar.

    Usa