Rutas
/
Pharo
Pharo
/
Ejercicios
/
Invertir un string
Invertir un string

Invertir un string

Fácil

Introducción

Invertir strings (leerlos de derecha a izquierda en lugar de izquierda a derecha) es una tarea sorprendentemente habitual en programación.

Por ejemplo, en bioinformática, invertir la secuencia de strings de ADN o ARN a menudo es importante para diversos análisis, como encontrar hebras complementarias o identificar secuencias palindrómicas que tienen relevancia biológica.

Instrucciones

Tu tarea es invertir un string dado.

Algunos ejemplos:

  • Convierte "stressed" en "desserts".
  • Convierte "strops" en "sports".
  • Convierte "racecar" en "racecar".

Aunque existen los métodos #reversed y #reverseDo: para los strings, ¿puedes averiguar cómo hacerlo tú mismo usando iteración de caracteres de nivel más bajo y streams?

Para ayudarte a explorar el código, Pharo tiene una práctica herramienta de búsqueda de código. Pulsa Mayús+Intro para activarla.

NOTA: Hemos seguido la convención de Exercism de llamar a la solución ReverseString; sin embargo, un nombre más propio de Smalltalk sería StringReverser.

Smalltalk y strings

En lo que respecta a los strings, hay algunos detalles pequeños y evidentes, como las comillas dobles para los comentarios, las comillas simples para los strings y una sintaxis especial para los caracteres (por ejemplo, $x para el carácter «x»), que pueden confundirte en una primera lectura, ya que las convenciones son distintas de las que se usan en otros lenguajes.

También existe la noción de símbolo, que es un string único en toda la memoria; es decir, cuando se construye (normalmente en tiempo de compilación), se realiza una búsqueda en memoria para determinar si ya existe otro igual, y solo se usa el original. La razón no es únicamente ahorrar memoria, sino también una aceleración notable al comparar símbolos.

"this is a comment"
'this is a string'
#'this is a symbol'
#thisIsASymbolToo

Además, en los programas de Smalltalk hay muy pocas comas, porque no desempeñan ningún papel sintáctico. Por eso los literales de array, por ejemplo, no llevan comas; por ejemplo, #(1 2 3 4 5). Sin embargo, la coma es un operador por derecho propio y lo notarás al concatenar dos strings; por ejemplo, 'string1', 'string2'.

Por último, conviene saber que Strings y Characters son clases distintas. Un String es una colección de Characters. Esto puede pillarte por sorpresa al iterar sobre strings, ya que puedes acabar pasando caracteres a un método que espera strings. Fíjate en lo siguiente:

(('hello' at: 2) = $e) inspect.
(('hello' at: 2) = 'e') inspect.

Smalltalk y streams

Los streams son útiles para la lectura y la escritura secuenciales. Hacen que el código sea más limpio al evitar la necesidad de incrementar un índice. Los streams funcionan con cualquier colección.

stream := WriteStream on: String new.
stream nextPut: $h ; nextPutAll: 'ell' ; nextPut: $o.
stream contents inspect
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Pharo Exercism

¿Listo para empezar Invertir un string?

Regístrate en Exercism para aprender y dominar Pharo con 50 ejercicios y mentoría humana real, todo gratis.

¡Análisis en profundidad de Invertir un string!

Explora 14 formas distintas de invertir un string y una serie de temas que incluyen los puntos de código Unicode, los grafemas, las asignaciones en la pila frente al montón y los punteros. Relájate y disfruta de 45 minutos de aprendizaje con Jeremy y Erik.