Menu
Coddy logo textTech

Coletor de Itens Únicos

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 68 de 68.

challenge icon

Desafio

Fácil

Crie um sistema de remoção de duplicatas que utiliza o padrão idiomático de conjunto (set) do Go para filtrar itens únicos de coleções de strings. Este desafio testará sua habilidade de usar o idioma map[string]struct{} para rastrear itens vistos e construir coleções contendo apenas elementos únicos.

Você receberá duas entradas:

  • Uma string contendo itens separados por vírgulas (ex: "apple,banana,apple,orange,banana,grape,apple")
  • Uma string contendo itens adicionais para mesclar, também separados por vírgulas (ex: "kiwi,apple,mango,banana,kiwi")

Sua tarefa é:

  1. Criar uma função chamada getUniqueItems que recebe um slice de strings e retorna um novo slice contendo apenas as strings únicas
  2. Dentro desta função, use o idioma map[string]struct{} para rastrear quais itens foram vistos
  3. Iterar pelo slice de entrada e para cada item:
    • Verificar se o item existe no seu conjunto usando o idioma comma ok
    • Se o item não tiver sido visto antes, adicione-o tanto ao conjunto quanto ao slice de resultado
  4. Analisar a primeira entrada dividindo-a por vírgulas para obter a lista de itens inicial
  5. Analisar a segunda entrada dividindo-a por vírgulas para obter os itens adicionais
  6. Exibir o cabeçalho do sistema: "=== UNIQUE ITEM COLLECTOR ==="
  7. Exibir os itens originais: "Original items: [comma-separated list of all original items]"
  8. Exibir os itens adicionais: "Additional items: [comma-separated list of all additional items]"
  9. Usar sua função getUniqueItems para obter itens únicos da lista original
  10. Exibir os itens originais únicos: "Unique original items: [comma-separated list of unique items from original list]"
  11. Combinar ambos os slices de entrada em um único slice contendo todos os itens
  12. Usar sua função getUniqueItems para obter itens únicos da lista combinada
  13. Exibir os itens únicos finais: "Final unique items: [comma-separated list of all unique items]"
  14. Exibir as estatísticas da coleção:
    • "=== 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. Exibir a mensagem de conclusão: "Unique item collection completed successfully"

Use o pacote strings para dividir as strings de entrada e o pacote fmt para a saída. Ao juntar itens para exibição, use strings.Join com um separador de vírgula. Este desafio demonstra como o idioma de conjunto do Go resolve eficientemente o problema comum de remover duplicatas de coleções, um padrão que você usará frequentemente em aplicações de processamento de dados.

Experimente você mesmo

package main

import (
	"fmt"
	"strings"
)

func main() {
	// Ler entrada
	var input1 string
	var input2 string
	fmt.Scanln(&input1)
	fmt.Scanln(&input2)
	
	// Analisar strings de entrada em fatias (slices)
	originalItems := strings.Split(input1, ",")
	additionalItems := strings.Split(input2, ",")
	
	// TODO: Escreva seu código aqui
	// 1. Crie a função getUniqueItems que usa o idioma map[string]struct{}
	// 2. Processe os itens originais para obter itens únicos
	// 3. Combine ambas as fatias e obtenha itens únicos da lista combinada
	// 4. Calcular estatísticas
	
	// Exibir cabeçalho do sistema
	fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
	
	// Exibir itens originais e adicionais
	fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
	fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
	
	// TODO: Exibir itens originais únicos, itens únicos finais e estatísticas
	// Use fmt.Printf e strings.Join para formatação de saída
}

Todas as lições de Lógica & Fluxo