Felfedeztél egy rést a közösségi média piacán: a nagyon-nagyon rövid bejegyzésekre van igény. Mióta a Twitter engedélyezi a 280 karakteres bejegyzéseket, azok, akik gyors frissítéseket szeretnének megosztani a közösségi médiában, nem kapnak megfelelő szolgáltatást. Úgy döntesz, hogy létrehozod a saját közösségi hálózatodat.
Hogy a terméked figyelemre méltó legyen, szélsőségesre veszed a dolgot, és csak legfeljebb 5 karakteres bejegyzéseket engedélyezel. Az 5 karakternél hosszabb bejegyzéseket 5 karakterre kell csonkítani.
Hogy a felhasználóid teljesen kifejezhessék magukat, engedélyezed az emojikat és a többi Unicode-karaktert.
A feladat az, hogy a bemeneti stringeket 5 karakterre csonkítsd.
A digitálisan tárolt szöveget byte-ok sorozatává kell alakítani. A karakterek byte-okhoz rendelésére három elterjedt megoldás van.
A UTF-8 és a UTF-16 is Unicode-kódolás, ami azt jelenti, hogy a karakterek hatalmas választékát képesek megjeleníteni, többek között:
A UTF-8 és a UTF-16 egyaránt változó hosszúságú kódolás, ami azt jelenti, hogy a különböző karakterek különböző mennyiségű helyet foglalnak el.
Vegyük például az 'a' betűt és a '😛' emojit. UTF-16-ban a betű 2 byte-ot foglal el, az emoji viszont 4 byte-ot.
Ebben a feladatban a trükk az, hogy a Unicode-karakterek (kódpontok) köré tervezett API-kat használd a Unicode-kódegységek helyett.
Egy „normál” UTF-16-kódolású string karakterek sorozataként ábrázolható, ahol minden karakter legfeljebb 16 bit hosszú lehet (innen a UTF-16 név). Ez azt jelenti, hogy legfeljebb 2¹⁶ (kettő a tizenhatodikon), azaz 65536 karakter ábrázolható 16 bittel, ami 1 kódegység. Ez a 65536 karakter alkotja az úgynevezett Alap többnyelvű készlet készletet, amely elég nagy a legtöbb nyelv leggyakoribb karaktereihez.
Néhány szimbólum azonban nem fér el 1 kódegységben. A megoldás, hogy két kódegységgel ábrázoljuk őket. Ez a két UTF-16 kódegység, amit gyakran surrogate pair-nek is neveznek, egy kódpontot alkot.
Összefoglalva tehát, amikor UTF-16-kódolásról beszélünk:
code unit 16 (vagy kevesebb) bit, amely egyetlen karaktert ábrázol.code point egy vagy két kódegység, amely egyetlen karaktert ábrázol.Hogy még nagyobb legyen a zűrzavar, léteznek grapheme cluster-ek is, amelyek alapvetően Unicode-karakterek (kódpontok) sorozatai, és egyetlen vizuális egységként kell kezelni őket. Például néhány emoji, mint ez: 👨👦.
A legtöbb beépített Javascript-metódus működik UTF-16-kódolású stringekkel, viszont UTF-16 kódegységek alapján dolgozik.
Például a String.prototype.split("") metódus kódegységek szerint bontja fel a stringet.
Másrészt a String iterators kódpontok szerint iterálnak.
A Unicode stringekről sokkal többet olvashatsz, és példákat is találhatsz az MDN oldalán.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) JavaScript nyelvet 37 fogalom159 feladat segítségével, valódi emberi mentorálással, mindez ingyen.