Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 222 · 30 lipca 2026 · Trudna

    Odwróć

    Zaimplementuj Reverse<T>, aby zwracał krotkę z elementami w odwrotnej kolejności.

    01

    Spróbuj rozwiązać samodzielnie

    Par 4

    Zagadka

    reverse-tuple.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
    • Reverse<[1, 2, 3]>—
      → [3, 2, 1]
    • Reverse<[]>—
      → []
    • Reverse<['a']>—
      → ['a']
    • Reverse<[1, 'b', true]>—
      → [true, 'b', 1]

    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 31 lipca 2026

    Rozwiązanie

    type Reverse<T extends readonly unknown[]> =
      T extends readonly [infer H, ...infer R] ? [...Reverse<R>, H] : []

    Najczęstsza błędna odpowiedź

    type Reverse<T extends readonly unknown[]> =
      T extends readonly [infer H, ...infer R] ? [H, ...Reverse<R>] : []

    To poprawnie rekurencyjnie odbudowuje krotkę w tej samej kolejności, w jakiej ją rozłożyło — czyli jest wymyślną funkcją tożsamościową. Odwrócenie zależy wyłącznie od tego, po której stronie rozwinięcia trafi głowa.

    Linia po linii

    1. [infer H, ...infer R]

      Klasyczny podział na głowę i ogon. H wiąże pierwszy element, R wiąże krotkę całej reszty.

    2. [...Reverse<R>, H]

      Głowa dołączana jest *po* odwróconym ogonie. Pierwszy element wejścia trafia więc na koniec, a każdy poziom rekurencji przesuwa swoją głowę o jedno miejsce dalej.

    Do zapamiętania

    Rekurencja głowa-ogon odbudowuje krotkę element po elemencie; kolejność składania to jedyne, co odróżnia kopię od odwrócenia, filtra czy mapowania.

    Wykorzystuje