Saltar al contenido
webtype.orgwebtype.org#265 greater-than · par 4

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 265 · 17 de septiembre de 2026 · Difícil

    Cuál es mayor

    Implementa `GreaterThan<A, B>` para que sea `true` cuando `A` es estrictamente mayor que `B`, y `false` en caso contrario. Ambos son enteros no negativos.

    01

    Intenta el puzle tú mismo

    Par 4

    Puzle

    greater-than.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
    • GreaterThan<3, 1>
      true
    • GreaterThan<1, 3>
      false
    • GreaterThan<2, 2>
      false
    • GreaterThan<0, 5>
      false

    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 18 de septiembre de 2026

    La solución

    type GreaterThan<A extends number, B extends number, C extends unknown[] = []> =
      C['length'] extends A
        ? false
        : C['length'] extends B
          ? true
          : GreaterThan<A, B, [...C, unknown]>

    El error más común

    type GreaterThan<A extends number, B extends number, C extends unknown[] = []> =
      C['length'] extends B
        ? true
        : C['length'] extends A
          ? false
          : GreaterThan<A, B, [...C, unknown]>

    Ambas pruebas son correctas; el orden no. Cuando `A` y `B` son iguales el contador llega a ambos en el mismo paso, y gana la pregunta que se hace primero. Preguntar primero por `B` responde `true` a `GreaterThan<2, 2>` — lo igual se informa como mayor, y solo el caso de igualdad llega a delatarlo.

    Línea por línea

    1. C['length'] extends A ? false

      Llegar antes a `A` significa que `B` es al menos igual de grande, así que `A` no puede ser estrictamente mayor. Poner esta rama primero es lo que hace que la comparación sea estricta y no «mayor o igual».

    2. [...C, unknown]

      Un tic del contador. La tupla nunca se lee — solo su longitud — así que es la forma más barata posible de sostener un número que puede subir de uno en uno.

    3. GreaterThan<0, 5>

      El contador arranca en cero, así que esto se decide antes de dar un solo paso: se alcanza `A` de inmediato y la respuesta es `false`.

    Para recordar

    Cuando dos condiciones pueden dispararse en el mismo paso, su orden es la especificación. Los tipos de comparación casi siempre aciertan en los casos desiguales y fallan en el empate.

    Usa