Przejdź do treści
webtype.orgwebtype.org#265 greater-than · par 4

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 265 · 17 września 2026 · Trudna

    Które większe

    Zaimplementuj `GreaterThan<A, B>`, aby dawał `true`, gdy `A` jest ostro większe od `B`, a `false` w przeciwnym razie. Oba są nieujemnymi liczbami całkowitymi.

    01

    Spróbuj rozwiązać samodzielnie

    Par 4

    Zagadka

    greater-than.ts
    Podejście 1 z 4Jeszcze nie sprawdzone

    Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej. Tab wcina; naciśnij Escape, a potem Tab, by wyjść fokusem.

    Testy

    4
    • GreaterThan<3, 1>
      true
    • GreaterThan<1, 3>
      false
    • GreaterThan<2, 2>
      false
    • GreaterThan<0, 5>
      false

    Jak oceniamy test Dokładna równość typów, nie przypisywalność — przecięcie to nie to samo co spłaszczony obiekt.

    Jak poszło innym

    Tę zagadkę rozwiązało jak dotąd mniej niż 5 osób. Rozkład pojawi się, gdy próbka będzie na tyle duża, by coś znaczyć.

    Gra na krótkim dystansie

    Najmniej znaków

    Nie ma jeszcze publicznych wyników.

    Archiwum
    02

    Rozwiązanie z komentarzem

    Opublikowano 18 września 2026

    Rozwiązanie

    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]>

    Najczęstsza błędna odpowiedź

    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]>

    Oba testy są dobre; kolejność nie. Gdy `A` i `B` są równe, licznik dochodzi do nich w tym samym kroku i wygrywa to pytanie, które zadano pierwsze. Pytanie najpierw o `B` daje `true` dla `GreaterThan<2, 2>` — równe jest raportowane jako większe, a ujawnia to wyłącznie przypadek równości.

    Linia po linii

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

      Osiągnięcie najpierw `A` oznacza, że `B` jest co najmniej tak duże, więc `A` nie może być ostro większe. Umieszczenie tej gałęzi jako pierwszej czyni porównanie ostrym, a nie „większe lub równe”.

    2. [...C, unknown]

      Jedno kliknięcie licznika. Krotki nikt nie czyta — czytana jest tylko jej długość — więc to najtańszy możliwy sposób trzymania liczby, którą da się zwiększyć o jeden.

    3. GreaterThan<0, 5>

      Licznik startuje od zera, więc rozstrzyga się to, zanim padnie choć jeden krok: `A` zostaje osiągnięte natychmiast i odpowiedzią jest `false`.

    Do zapamiętania

    Gdy dwa warunki mogą zadziałać w tym samym kroku, ich kolejność jest specyfikacją. Typy porównujące są niemal zawsze poprawne w przypadkach nierównych i błędne przy remisie.

    Wykorzystuje