Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 244 · 27 de agosto de 2026 · Difícil

    Repite

    Implementa Repeat<S, N> para que concatene la cadena S exactamente N veces. Repetir cero veces da la cadena vacía.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    repeat-string.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
    • Repeat<'ab', 3>—
      → 'ababab'
    • Repeat<'x', 0>—
      → ''
    • Repeat<'x', 1>—
      → 'x'
    • Repeat<'-', 5>—
      → '-----'

    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 28 de agosto de 2026

    La solución

    type Repeat<
      S extends string,
      N extends number,
      Acc extends unknown[] = [],
    > = Acc['length'] extends N ? '' : `${S}${Repeat<S, N, [...Acc, unknown]>}`

    El error más común

    type Repeat<
      S extends string,
      N extends number,
      Acc extends unknown[] = [],
    > = Acc['length'] extends N ? S : `${S}${Repeat<S, N, [...Acc, unknown]>}`

    El caso base emite una copia de más. Devolver S cuando el contador está lleno hace que el paso terminal también aporte, así que Repeat<"ab", 3> produce cuatro copias — y Repeat<"x", 0> devuelve "x" cuando no debería devolver nada.

    Línea por línea

    1. Acc['length'] extends N ? ''

      El caso base debe ser el *elemento neutro* de la operación que construyes. Para la concatenación es la cadena vacía, igual que [] lo es al construir una tupla y 0 al sumar números.

    2. [...Acc, unknown]

      El acumulador contiene unknown porque su contenido es irrelevante — solo se lee su longitud. Es una cuenta de marcas, no una colección.

    Para recordar

    Cuando un bucle a nivel de tipos se desvía en uno, mira lo que devuelve el caso base, no el paso recursivo. La rama terminal debe aportar el elemento neutro, no otra copia del contenido.

    Usa