Menu
Coddy logo textTech

Colector de elementos únicos

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

challenge icon

Desafío

Fácil

Crea un sistema de eliminación de duplicados que utilice el patrón idiomático de conjuntos de Go para filtrar elementos únicos de colecciones de cadenas. Este desafío pondrá a prueba tu capacidad para usar el patrón idiomático map[string]struct{} con el fin de realizar un seguimiento de los elementos ya vistos y crear colecciones que contengan únicamente elementos únicos.

Recibirás dos entradas:

  • Una cadena que contiene elementos separados por comas (por ejemplo, "apple,banana,apple,orange,banana,grape,apple")
  • Una cadena que contiene elementos adicionales que se combinarán, también separados por comas (por ejemplo, "kiwi,apple,mango,banana,kiwi")

Tu tarea es:

  1. Crear una función llamada getUniqueItems que reciba un slice de cadenas y devuelva un nuevo slice que contenga únicamente las cadenas únicas
  2. Dentro de esta función, utilizar el patrón idiomático map[string]struct{} para realizar un seguimiento de los elementos que ya se han visto
  3. Recorrer el slice de entrada y, para cada elemento:
    • Comprobar si el elemento existe en tu conjunto mediante el patrón coma-ok
    • Si el elemento no se ha visto antes, añadirlo tanto al conjunto como al slice de resultados
  4. Analizar la primera entrada dividiéndola por comas para obtener la lista inicial de elementos
  5. Analizar la segunda entrada dividiéndola por comas para obtener los elementos adicionales
  6. Mostrar el encabezado del sistema: "=== UNIQUE ITEM COLLECTOR ==="
  7. Mostrar los elementos originales: "Original items: [comma-separated list of all original items]"
  8. Mostrar los elementos adicionales: "Additional items: [comma-separated list of all additional items]"
  9. Utilizar la función getUniqueItems para obtener los elementos únicos de la lista original
  10. Mostrar los elementos originales únicos: "Unique original items: [comma-separated list of unique items from original list]"
  11. Combinar ambos slices de entrada en un único slice que contenga todos los elementos
  12. Utilizar la función getUniqueItems para obtener los elementos únicos de la lista combinada
  13. Mostrar los elementos únicos finales: "Final unique items: [comma-separated list of all unique items]"
  14. Mostrar las estadísticas de la colección:
    • "=== COLLECTION STATISTICS ==="
    • "Total original items: [count of original items]"
    • "Total additional items: [count of additional items]"
    • "Total combined items: [count of all items combined]"
    • "Unique items found: [count of unique items]"
    • "Duplicates removed: [total combined items minus unique items]"
  15. Mostrar el mensaje de finalización: "Unique item collection completed successfully"

Utiliza el paquete strings para dividir las cadenas de entrada y el paquete fmt para la salida. Al unir elementos para mostrarlos, utiliza strings.Join con una coma como separador. Este desafío demuestra cómo el patrón de conjuntos de Go resuelve eficazmente el problema común de eliminar duplicados de las colecciones, un patrón que utilizarás con frecuencia en aplicaciones de procesamiento de datos.

Pruébalo tú mismo

package main

import (
	"fmt"
	"strings"
)

func main() {
	// Leer entrada
	var input1 string
	var input2 string
	fmt.Scanln(&input1)
	fmt.Scanln(&input2)
	
	// Analizar las cadenas de entrada en slices
	originalItems := strings.Split(input1, ",")
	additionalItems := strings.Split(input2, ",")
	
	// TODO: Escribe tu código aquí
	// 1. Crear la función getUniqueItems que use el modismo map[string]struct{}
	// 2. Procesar los elementos originales para obtener elementos únicos
	// 3. Combinar ambos slices y obtener elementos únicos de la lista combinada
	// 4. Calcular estadísticas
	
	// Mostrar encabezado del sistema
	fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
	
	// Mostrar elementos originales y adicionales
	fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
	fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
	
	// TODO: Mostrar elementos originales únicos, elementos únicos finales y estadísticas
	// Usar fmt.Printf y strings.Join para el formateo de salida
}

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Go online