Menu
CoddyTech

Повторение — уникальные имена пользователей

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

challenge icon

Задание

Легко

Создай систему регистрации имён пользователей, которая предотвращает дублирование имён с помощью идиоматического использования множеств в Go. В этом задании демонстрируется, как создать надёжную систему управления пользователями, обеспечивающую уникальность имён пользователей при всех регистрациях.

Ты получишь два входных значения:

  • Строку с уже существующими именами пользователей, разделёнными запятыми (например, "alice123,bob_dev,charlie2024,diana_codes")
  • Строку с попытками регистрации новых имён пользователей, разделёнными запятыми (например, "eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")

Твоя задача:

  1. Создать множество с помощью идиоматической конструкции Go map[string]struct{} для хранения зарегистрированных имён пользователей
  2. Разобрать первую входную строку, разделив её по запятым, чтобы получить существующие имена пользователей
  3. Добавить каждое существующее имя пользователя в множество, используя пустой литерал структуры {} в качестве значения
  4. Разобрать вторую входную строку, разделив её по запятым, чтобы получить попытки регистрации новых имён пользователей
  5. Для каждой попытки регистрации проверить с помощью идиомы comma ok, существует ли уже имя пользователя в множестве
  6. Отобразить результат каждой попытки регистрации:
    • Если имя пользователя доступно: "Registered: [username]" и добавить его в множество
    • Если имя пользователя уже существует: "Username taken: [username]"
  7. После обработки всех попыток регистрации отобразить подробную сводку:
    • "Registration Summary:"
    • "Initial usernames: [initial_count]"
    • "Registration attempts: [attempts_count]"
    • "Successful registrations: [successful_count]"
    • "Rejected (duplicate): [rejected_count]"
    • "Total registered usernames: [total_count]"
  8. Наконец, вывести список всех зарегистрированных в системе имён пользователей:
    • Заголовок: "All registered usernames:"
    • Каждое имя пользователя на отдельной строке: "@[username]"

Используй пакет strings, чтобы разделить входные строки по запятым. В этом задании демонстрируется, как идиоматическое использование множеств в Go позволяет эффективно предотвращать дублирование при регистрации пользователей, обеспечивая целостность данных и высокую скорость поиска при проверке имён пользователей.

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

package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	// Считайте входные данные
	var existingUsernames string
	var newRegistrations string
	fmt.Scanln(&existingUsernames)
	fmt.Scanln(&newRegistrations)
	
	// Разберите входные строки
	existing := strings.Split(existingUsernames, ",")
	attempts := strings.Split(newRegistrations, ",")
	
	// Создайте множество идиоматичным для Go способом
	userSet := make(map[string]struct{})
	
	// TODO: Напишите код ниже
	// 1. Добавьте существующие имена пользователей в множество
	// 2. Обработайте каждую попытку регистрации
	// 3. Выведите результат каждой попытки регистрации
	// 4. Подсчитайте и выведите сводку
	// 5. Выведите список всех зарегистрированных имён пользователей (не забудьте отсортировать их для единообразного вывода)
	
}

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

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