Menu
Coddy logo textTech

Repaso - Construir una utilidad

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 57 de 68.

challenge icon

Desafío

Fácil

Crea un paquete stringutil integral con funciones de manipulación de cadenas y demuestra su uso en un programa principal. Este desafío pondrá a prueba tu capacidad para crear un paquete de utilidad personalizado, implementar funciones exportadas y usar tu paquete desde otro programa.

Recibirás dos entradas:

  • Una cadena que contiene especificaciones de funciones en el formato "function1:description1,function2:description2" (por ejemplo, "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • Una cadena que contiene cadenas de prueba separadas por tuberías (pipes) en el formato "string1|string2|string3" (por ejemplo, "hello|Go Programming|WORLD")

Tu tarea es:

  1. Crear un paquete stringutil declarando package stringutil
  2. Analizar la primera entrada dividiéndola por comas para obtener las especificaciones de cada función
  3. Para cada especificación de función, dividir por dos puntos para obtener el nombre de la función y la descripción
  4. Implementar las siguientes funciones exportadas en tu paquete stringutil:
    • Reverse(s string) string - devuelve la cadena con los caracteres en orden inverso
    • ToUpper(s string) string - devuelve la cadena convertida a mayúsculas
    • ToLower(s string) string - devuelve la cadena convertida a minúsculas
    • Length(s string) int - devuelve la longitud de la cadena
  5. En tu programa principal, importar el paquete stringutil
  6. Mostrar el encabezado del paquete: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. Mostrar las funciones disponibles:
    • "Available functions in stringutil package:"
    • Para cada función de la primera entrada: "- [function_name]: [description]"
  8. Analizar la segunda entrada dividiéndola por tuberías para obtener las cadenas de prueba individuales
  9. Mostrar el encabezado de pruebas: "Testing stringutil functions:"
  10. Para cada cadena de prueba, demostrar todas las funciones:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. Calcular y mostrar estadísticas:
    • "=== STATISTICS ==="
    • "Total test strings processed: [number_of_test_strings]"
    • "Functions available in package: [number_of_functions_from_first_input]"
    • "Total function calls made: [total_function_calls]"
  12. Mostrar la cadena más larga y la más corta:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. Mostrar el mensaje de finalización: "Package demonstration completed successfully"

Usa el paquete strings para dividir las cadenas de entrada y manipular texto, y el paquete fmt para la salida formateada. Para la función Reverse, necesitarás convertir la cadena en un slice de runas, invertir el orden y volver a convertirla en una cadena. Recuerda que todas las funciones exportadas deben comenzar con letras mayúsculas para ser accesibles desde otros paquetes. Este desafío demuestra cómo crear paquetes de utilidad reutilizables y organizar funcionalidades relacionadas.

Pruébalo tú mismo

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

// TODO: Crea las funciones de tu paquete stringutil aquí
// Dado que no podemos usar archivos separados, define las funciones directamente
// Normalmente estas estarían en un archivo de paquete separado

// func Reverse(s string) string {
//     // Convertir a runas, invertir, convertir de nuevo a cadena
// }

// func ToUpper(s string) string {
//     // Usar strings.ToUpper
// }

// func ToLower(s string) string {
//     // Usar strings.ToLower
// }

// func Length(s string) int {
//     // Devolver len(s)
// }

func main() {
	// Leer la entrada usando bufio.Scanner para manejar los espacios correctamente
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	functionSpecs := scanner.Text()
	
	scanner.Scan()
	testStrings := scanner.Text()
	
	// Analizar las especificaciones de las funciones
	funcList := strings.Split(functionSpecs, ",")
	
	// Analizar las cadenas de prueba
	testList := strings.Split(testStrings, "|")
	
	// TODO: Escribe tu código a continuación
	// 1. Mostrar el encabezado del paquete
	// 2. Mostrar las funciones disponibles de funcList (verificar la longitud del array)
	// 3. Probar todas las funciones con cada cadena de prueba
	// 4. Calcular y mostrar estadísticas
	// 5. Buscar y mostrar las cadenas más largas/cortas (verificar si testList tiene elementos)
	// 6. Mostrar mensaje de finalización
	
	// Recuerda usar las funciones de tu paquete stringutil como:
	// Reverse(testString)
	// ToUpper(testString)
	// ToLower(testString)
	// Length(testString)
}

Todas las lecciones de Lógica y Flujo