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 use o padrão idiomático de conjunto do Go para filtrar itens únicos de coleções de strings. Este desafio testará sua capacidade de usar o padrão map[string]struct{} para rastrear itens já vistos e criar coleções contendo apenas elementos únicos.

Você receberá duas entradas:

  • Uma string contendo itens separados por vírgulas (por exemplo, "apple,banana,apple,orange,banana,grape,apple")
  • Uma string contendo itens adicionais a serem mesclados, também separados por vírgulas (por exemplo, "kiwi,apple,mango,banana,kiwi")

Sua tarefa é:

  1. Criar uma função chamada getUniqueItems que receba um slice de strings e retorne um novo slice contendo apenas as strings únicas
  2. Dentro dessa função, usar o padrão map[string]struct{} para rastrear quais itens já foram vistos
  3. Iterar pelo slice de entrada e, para cada item:
    • Verificar se o item existe no seu conjunto usando o padrão vírgula-ok
    • Se o item ainda não tiver sido visto, adicioná-lo tanto ao conjunto quanto ao slice de resultados
  4. Analisar a primeira entrada dividindo-a pelas vírgulas para obter a lista inicial de itens
  5. Analisar a segunda entrada dividindo-a pelas 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 os 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 os dois slices de entrada em um único slice contendo todos os itens
  12. Usar sua função getUniqueItems para obter os 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 unir itens para exibição, use strings.Join com uma vírgula como separador. Este desafio demonstra como o padrão de conjunto do Go resolve com eficiência o problema comum de remover duplicatas de coleções, um padrão que você usará com frequência 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

Pratique por conta própria: Compilador de Go online