Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 232 · 9 sierpnia 2026 · Średnia

    Zip

    Zaimplementuj Zip<A, B>, aby łączył elementy dwóch krotek pozycyjnie w pary. Gdy krotki mają różną długość, zatrzymaj się na krótszej.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    zip-tuples.ts
    Podejście 1 z 3Jeszcze nie sprawdzone

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

    Testy

    4
    • Zip<[1, 2], ['a', 'b']>—
      → [[1, 'a'], [2, 'b']]
    • Zip<[], []>—
      → []
    • Zip<[1, 2, 3], ['a']>—
      → [[1, 'a']]
    • Zip<[1], ['a', 'b', 'c']>—
      → [[1, 'a']]

    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 10 sierpnia 2026

    Rozwiązanie

    type Zip<A extends readonly unknown[], B extends readonly unknown[]> =
      A extends readonly [infer AH, ...infer AR]
        ? B extends readonly [infer BH, ...infer BR]
          ? [[AH, BH], ...Zip<AR, BR>]
          : []
        : []

    Najczęstsza błędna odpowiedź

    type Zip<A extends readonly unknown[], B extends readonly unknown[]> =
      A extends readonly [infer AH, ...infer AR]
        ? B extends readonly [infer BH, ...infer BR]
          ? [AH, BH, ...Zip<AR, BR>]
          : []
        : []

    Bez wewnętrznych nawiasów pary rozsypują się płasko w wyniku: [1, "a", 2, "b"] zamiast [[1, "a"], [2, "b"]]. Zipowanie polega na strukturze, a struktura mieszka w tych nawiasach.

    Linia po linii

    1. [[AH, BH], ...Zip<AR, BR>]

      Wewnętrzne [AH, BH] to jedna para; rozwinięcie dokłada pary z reszty. Zagnieżdżenie krotki w krotce utrzymuje parowanie widoczne w typie.

    2. : []

      Obie gałęzie awaryjne kończą rekurencję, więc ta krotka, która wyczerpie się pierwsza, zatrzymuje zip. Daje to zachowanie „krótsza z dwóch” bez mierzenia którejkolwiek długości.

    Do zapamiętania

    Przechodzenie dwóch struktur naraz to po prostu dwa zagnieżdżone warunki rozkładające. Ciekawą decyzją projektową jest to, co się dzieje, gdy różnią się długością — a tutaj odpowiedzią jest nierobienie niczego szczególnego.

    Wykorzystuje