Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 228 · 5 sierpnia 2026 · Średnia

    Zamień

    Zaimplementuj Replace<S, From, To>, aby zamieniał **pierwsze** wystąpienie From w S na To. Puste From nie zamienia niczego.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    replace-string.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
    • Replace<'hello world', 'world', 'there'>—
      → 'hello there'
    • Replace<'abc', 'x', 'y'>—
      → 'abc'
    • Replace<'aaa', 'a', 'b'>—
      → 'baa'
    • Replace<'abc', '', 'x'>—
      → 'abc'

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

    Rozwiązanie

    type Replace<S extends string, From extends string, To extends string> =
      From extends ''
        ? S
        : S extends `${infer H}${From}${infer T}`
          ? `${H}${To}${T}`
          : S

    Najczęstsza błędna odpowiedź

    type Replace<S extends string, From extends string, To extends string> =
      S extends `${infer H}${From}${infer T}` ? `${H}${To}${T}` : S

    Poprawne dla każdego wejścia poza pustym From. Pusty łańcuch mieści się między dowolnymi dwoma znakami, więc wzorzec pasuje z pustym H i wstawia To na początku — Replace<"abc", "", "x"> daje "xabc".

    Linia po linii

    1. From extends '' ? S

      Strażnik musi być pierwszy. Gdy dojdzie do wzorca szablonowego, puste From już spowodowało dopasowanie i nie da się go potem odróżnić.

    2. `${infer H}${From}${infer T}`

      Wnioskowanie jest zachłanne od lewej, więc H bierze najkrótszy przedrostek pozwalający dopasować resztę. Właśnie dlatego zamieniane jest tylko *pierwsze* wystąpienie.

    Do zapamiętania

    Pusty łańcuch to null typów literałów szablonowych: pasuje wszędzie i po cichu psuje wzorce zakładające, że dopasowanie oznacza znalezienie czegoś.

    Wykorzystuje