Tracks
/
Pharo
Pharo
/
Ejercicios
/
Cadena invertida
Cadena invertida

Cadena invertida

Fácil

Introducción

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

Por ejemplo, en bioinformática, invertir la secuencia de strings de ADN o ARN suele ser importante para diversos análisis, como encontrar cadenas complementarias o identificar secuencias palindrómicas que tienen importancia 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 descubrir cómo hacerlo por tu cuenta usando iteración de caracteres de más bajo nivel y streams?

Para ayudarte a explorar el código, Pharo tiene una práctica herramienta de búsqueda de código. Presiona Shift-Enter 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 los Strings

En cuanto a los strings, hay algunos detalles pequeños pero 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 podrían 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 hace una búsqueda en memoria para determinar si ya existe otro igual, y solo se usa el original. La razón no es solo ahorrar memoria, sino también una aceleración considerable 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 cumplen ninguna función sintáctica. Por eso los literales de array, por ejemplo, no llevan comas; p. ej. #(1 2 3 4 5) Sin embargo, la coma es un operador por derecho propio y lo notarás al concatenar dos strings; p. ej. 'string1', 'string2'

Por último, vale la pena saber que String y Character son clases distintas. Un String es una colección de Characters. Esto puede tomarte por sorpresa al iterar sobre strings, ya que puedes terminar pasando caracteres a un método que espera strings. Considera lo siguiente...

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

Smalltalk y los 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 operan sobre 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 una pestaña nuevas
Pharo Exercism

¿Todo listo para empezar Cadena invertida?

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

¡Profundiza en Cadena invertida!

Explora 14 formas diferentes de invertir una cadena y repasa una variedad de temas, como los puntos de código Unicode, los grafemas, las asignaciones en la pila y en el montón, y los punteros. Relájate y disfruta de 45 minutos de aprendizaje con Jeremy y Erik.