Menu
Coddy logo textTech

Zbieranie unikalnych elementów

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 68 z 68.

challenge icon

Wyzwanie

Łatwy

Utwórz system usuwania duplikatów, który wykorzystuje idiomatyczny wzorzec zbioru w Go do filtrowania unikalnych elementów z kolekcji ciągów znaków. To wyzwanie sprawdzi Twoją umiejętność korzystania z idiomu map[string]struct{} do śledzenia napotkanych elementów i tworzenia kolekcji zawierających wyłącznie unikalne elementy.

Otrzymasz dwa wejścia:

  • Ciąg znaków zawierający elementy oddzielone przecinkami (np. "apple,banana,apple,orange,banana,grape,apple")
  • Ciąg znaków zawierający dodatkowe elementy do połączenia, również oddzielone przecinkami (np. "kiwi,apple,mango,banana,kiwi")

Twoje zadanie:

  1. Utworzyć funkcję o nazwie getUniqueItems, która przyjmuje wycinek ciągów znaków i zwraca nowy wycinek zawierający wyłącznie unikalne ciągi znaków
  2. Wewnątrz tej funkcji użyć idiomu map[string]struct{} do śledzenia, które elementy zostały już napotkane
  3. Przejść przez wejściowy wycinek i dla każdego elementu:
    • Sprawdzić, czy element istnieje w zbiorze, używając idiomu przecinek-ok
    • Jeśli element nie został wcześniej napotkany, dodać go zarówno do zbioru, jak i do wycinka wynikowego
  4. Przetworzyć pierwsze wejście, dzieląc je po przecinkach, aby uzyskać początkową listę elementów
  5. Przetworzyć drugie wejście, dzieląc je po przecinkach, aby uzyskać dodatkowe elementy
  6. Wyświetlić nagłówek systemu: "=== UNIQUE ITEM COLLECTOR ==="
  7. Wyświetlić oryginalne elementy: "Original items: [comma-separated list of all original items]"
  8. Wyświetlić dodatkowe elementy: "Additional items: [comma-separated list of all additional items]"
  9. Użyć funkcji getUniqueItems, aby uzyskać unikalne elementy z oryginalnej listy
  10. Wyświetlić unikalne oryginalne elementy: "Unique original items: [comma-separated list of unique items from original list]"
  11. Połączyć oba wejściowe wycinki w jeden wycinek zawierający wszystkie elementy
  12. Użyć funkcji getUniqueItems, aby uzyskać unikalne elementy z połączonej listy
  13. Wyświetlić końcowe unikalne elementy: "Final unique items: [comma-separated list of all unique items]"
  14. Wyświetlić statystyki kolekcji:
    • "=== 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. Wyświetlić komunikat o ukończeniu: "Unique item collection completed successfully"

Użyj pakietu strings do dzielenia ciągów wejściowych oraz pakietu fmt do wyświetlania wyników. Łącząc elementy na potrzeby wyświetlenia, użyj strings.Join z przecinkiem jako separatorem. To wyzwanie pokazuje, jak idiom zbioru w Go skutecznie rozwiązuje powszechny problem usuwania duplikatów z kolekcji — wzorzec, którego będziesz często używać w aplikacjach do przetwarzania danych.

Spróbuj swoich sił

package main

import (
	"fmt"
	"strings"
)

func main() {
	// Wczytaj dane wejściowe
	var input1 string
	var input2 string
	fmt.Scanln(&input1)
	fmt.Scanln(&input2)
	
	// Podziel ciągi wejściowe na listy
	originalItems := strings.Split(input1, ",")
	additionalItems := strings.Split(input2, ",")
	
	// TODO: Napisz tutaj swój kod
	// 1. Utwórz funkcję getUniqueItems, korzystając z idiomu map[string]struct{}
	// 2. Przetwórz oryginalne elementy, aby uzyskać unikalne elementy
	// 3. Połącz obie listy i uzyskaj unikalne elementy z połączonej listy
	// 4. Oblicz statystyki
	
	// Wyświetl nagłówek systemu
	fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
	
	// Wyświetl oryginalne i dodatkowe elementy
	fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
	fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
	
	// TODO: Wyświetl unikalne oryginalne elementy, końcową listę unikalnych elementów i statystyki
	// Użyj fmt.Printf i strings.Join do formatowania danych wyjściowych
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online