Menu
CoddyTech

Сбор уникальных элементов

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 68 из 68.

challenge icon

Задание

Легко

Создай систему удаления дубликатов, использующую идиоматический для Go шаблон множества для отбора уникальных элементов из коллекций строк. Это задание проверит твоё умение использовать идиому map[string]struct{} для отслеживания уже встреченных элементов и создания коллекций, содержащих только уникальные элементы.

Тебе будут предоставлены два входных значения:

  • Строка, содержащая элементы, разделённые запятыми (например, "apple,banana,apple,orange,banana,grape,apple")
  • Строка с дополнительными элементами для объединения, также разделёнными запятыми (например, "kiwi,apple,mango,banana,kiwi")

Твоя задача:

  1. Создать функцию с именем getUniqueItems, которая принимает срез строк и возвращает новый срез, содержащий только уникальные строки
  2. Внутри этой функции использовать идиому map[string]struct{} для отслеживания элементов, которые уже встречались
  3. Перебрать входной срез и для каждого элемента:
    • Проверить, существует ли элемент в твоём множестве, используя идиому comma-ok
    • Если элемент ещё не встречался, добавить его и в множество, и в результирующий срез
  4. Разобрать первый ввод, разделив его по запятым, чтобы получить исходный список элементов
  5. Разобрать второй ввод, разделив его по запятым, чтобы получить дополнительные элементы
  6. Вывести заголовок системы: "=== UNIQUE ITEM COLLECTOR ==="
  7. Вывести исходные элементы: "Original items: [comma-separated list of all original items]"
  8. Вывести дополнительные элементы: "Additional items: [comma-separated list of all additional items]"
  9. Использовать функцию getUniqueItems, чтобы получить уникальные элементы из исходного списка
  10. Вывести уникальные исходные элементы: "Unique original items: [comma-separated list of unique items from original list]"
  11. Объединить оба входных среза в один срез, содержащий все элементы
  12. Использовать функцию getUniqueItems, чтобы получить уникальные элементы из объединённого списка
  13. Вывести итоговые уникальные элементы: "Final unique items: [comma-separated list of all unique items]"
  14. Вывести статистику коллекции:
    • "=== 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. Вывести сообщение о завершении: "Unique item collection completed successfully"

Используй пакет strings для разделения входных строк и пакет fmt для вывода. При объединении элементов для вывода используй strings.Join с запятой в качестве разделителя. Это задание показывает, как идиома множества в Go эффективно решает распространённую задачу удаления дубликатов из коллекций — этот шаблон ты будешь часто использовать в приложениях для обработки данных.

Попробуйте сами

package main

import (
	"fmt"
	"strings"
)

func main() {
	// Считайте входные данные
	var input1 string
	var input2 string
	fmt.Scanln(&input1)
	fmt.Scanln(&input2)
	
	// Разбейте входные строки на срезы
	originalItems := strings.Split(input1, ",")
	additionalItems := strings.Split(input2, ",")
	
	// TODO: Напишите здесь свой код
	// 1. Создайте функцию getUniqueItems, использующую идиому map[string]struct{}
	// 2. Обработайте исходные элементы, чтобы получить уникальные элементы
	// 3. Объедините оба среза и получите уникальные элементы из объединённого списка
	// 4. Вычислите статистику
	
	// Выведите заголовок системы
	fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
	
	// Выведите исходные и дополнительные элементы
	fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
	fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
	
	// TODO: Выведите уникальные исходные элементы, итоговые уникальные элементы и статистику
	// Используйте fmt.Printf и strings.Join для форматирования вывода
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Go