Microblog

Microblog

Fácil

Instruções

Você identificou uma lacuna no mercado de redes sociais para posts muito, muito curtos. Agora que o Twitter permite posts de 280 caracteres, as pessoas que querem atualizações rápidas nas redes sociais não estão sendo atendidas. Você decide criar sua própria rede social.

Para tornar seu produto notável, você o leva ao extremo e só permite posts de 5 caracteres ou menos. Qualquer post com mais de 5 caracteres deve ser truncado para 5.

Para permitir que seus usuários se expressem plenamente, você permite emoji e outros caracteres Unicode.

A tarefa é truncar strings de entrada para 5 caracteres.

Codificações de texto

Todo texto armazenado digitalmente precisa ser convertido em uma sequência de bytes. Existem 3 maneiras comumente usadas de mapear caracteres para bytes.

  • ASCII consegue codificar caracteres da língua inglesa. Todos os caracteres têm exatamente 1 byte.
  • UTF-8 é uma codificação de texto Unicode. Os caracteres ocupam entre 1 e 4 bytes.
  • UTF-16 é uma codificação de texto Unicode. Os caracteres têm 2 ou 4 bytes.

UTF-8 e UTF-16 são ambas codificações Unicode, o que significa que são capazes de representar uma enorme variedade de caracteres, incluindo:

  • Texto na maioria dos idiomas e sistemas de escrita do mundo
  • Textos históricos
  • Emoji

UTF-8 e UTF-16 são ambas codificações de comprimento variável, o que significa que caracteres diferentes ocupam quantidades diferentes de espaço.

Considere a letra 'a' e o emoji '😛'. Em UTF-16, a letra ocupa 2 bytes, mas o emoji ocupa 4 bytes.

O truque deste exercício é usar APIs pensadas em torno de caracteres Unicode (codepoints) em vez de codeunits Unicode.

Pontos de código Unicode vs unidades de código.

Uma string "normal" codificada em UTF-16 pode ser representada como uma série de caracteres, em que cada caractere pode ter até 16 bits (daí o nome UTF-16). Isso significa que existem no máximo 2¹⁶ (dois elevado à décima sexta potência), ou 65536 caracteres possíveis representáveis com 16 bits, ou 1 unidade de código. Esses 65536 caracteres formam o que se conhece como Conjunto Multilíngue Básico, que é grande o suficiente para os caracteres mais comuns da maioria dos idiomas.

Porém, alguns símbolos não cabem em apenas 1 unidade de código. A solução é representá-los com duas unidades de código. Essas duas unidades de código UTF-16, muitas vezes chamadas também de par substituto, formam um ponto de código.

Então, resumindo, quando falamos de codificação UTF-16:

  • Uma code unit é 16 (ou menos) bits que representam um único caractere.
  • Um code point é uma ou duas unidades de código que representam um único caractere.

Para complicar ainda mais, existem também os grapheme clusters, que são basicamente sequências de caracteres Unicode (pontos de código) que devem ser tratadas como uma única unidade visual. Por exemplo, alguns emojis, como este 👨‍👦.

UTF-16 no JavaScript

A maioria dos métodos nativos do JavaScript funciona com strings codificadas em UTF-16, mas eles trabalham com base em unidades de código UTF-16. Por exemplo, o método String.prototype.split("") separa uma string por unidades de código.

Por outro lado, String iterators iteram por pontos de código.

Você pode ler muito mais, e encontrar exemplos sobre strings Unicode, no MDN.

Editar via GitHub O link abre em uma nova janela ou aba
JavaScript Exercism

Tudo pronto para começar Microblog?

Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.