Microblog

Microblog

Fácil

Instrucciones

Has identificado una laguna en el mercado de las redes sociales para publicaciones muy muy cortas. Ahora que Twitter permite publicaciones de 280 caracteres, las personas que quieren actualizaciones rápidas en redes sociales no están bien atendidas. Decides crear tu propia red social.

Para que tu producto sea digno de mención, lo llevas al extremo y solo permites publicaciones de 5 caracteres o menos. Cualquier publicación de más de 5 caracteres debería truncarse a 5.

Para permitir que tus usuarios se expresen plenamente, admites emojis y otros caracteres Unicode.

La tarea consiste en truncar los strings de entrada a 5 caracteres.

Codificaciones de texto

El texto almacenado digitalmente tiene que convertirse en una serie de bytes. Hay 3 formas de asignar caracteres a bytes que se usan habitualmente.

  • ASCII puede codificar caracteres de la lengua inglesa. Todos los caracteres ocupan precisamente 1 byte.
  • UTF-8 es una codificación de texto Unicode. Los caracteres ocupan entre 1 y 4 bytes.
  • UTF-16 es una codificación de texto Unicode. Los caracteres ocupan 2 o 4 bytes.

UTF-8 y UTF-16 son ambas codificaciones Unicode, lo que significa que son capaces de representar una enorme variedad de caracteres, entre los que se incluyen:

  • Texto en la mayoría de las lenguas y sistemas de escritura del mundo
  • Texto histórico
  • Emojis

UTF-8 y UTF-16 son ambas codificaciones de longitud variable, lo que significa que distintos caracteres ocupan distintas cantidades de espacio.

Fíjate en la letra «a» y en el emoji «😛». En UTF-16, la letra ocupa 2 bytes, pero el emoji ocupa 4 bytes.

El truco de este ejercicio consiste en usar APIs diseñadas en torno a caracteres Unicode (puntos de código) en lugar de unidades de código Unicode.

Puntos de código de Unicode frente a unidades de código.

Un string codificado en UTF-16 «normal» puede representarse como una serie de caracteres, donde cada carácter puede ocupar hasta 16 bits (de ahí el nombre UTF-16). Esto significa que hay un máximo de 2¹⁶ (dos elevado a dieciséis), o 65536 caracteres posibles representables con 16 bits, o 1 unidad de código. Estos 65536 caracteres forman lo que se conoce como el Conjunto Multilingüe Básico, que es lo bastante grande para los caracteres más comunes de la mayoría de los idiomas.

Sin embargo, algunos símbolos no caben en una sola unidad de código. La solución es representarlos con dos unidades de código. Estas dos unidades de código UTF-16, a las que a menudo también se hace referencia como par suplente, forman un punto de código.

Así que, en resumen, cuando hablamos de la codificación UTF-16:

  • Una code unit es de 16 bits (o menos) y representa un solo carácter.
  • Un code point es una o dos unidades de código que representan un solo carácter.

Para añadir más confusión, también existen los grupos de grafemas, que son básicamente secuencias de caracteres Unicode (puntos de código) que deberían tratarse como una única unidad visual. Por ejemplo, algunos emojis, como este 👨‍👦.

UTF-16 en JavaScript

La mayoría de los métodos integrados de JavaScript funcionan con strings codificados en UTF-16; sin embargo, lo hacen en función de las unidades de código UTF-16. Por ejemplo, un método String.prototype.split("") separa un string por unidades de código.

Por otro lado, los String iterators iteran por puntos de código.

Puedes leer mucho más, y encontrar ejemplos sobre strings de Unicode, en MDN.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
JavaScript Exercism

¿Listo para empezar Microblog?

Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.