Menu
Coddy logo textTech

Итоги — Уникальные имена пользователей

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

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

challenge icon

Задание

Легко

Создайте систему регистрации имен пользователей, которая предотвращает дублирование имен, используя идиому множества (set) в 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, ",")
	
	// Создание множества (set), используя идиому Go
	userSet := make(map[string]struct{})
	
	// TODO: Напишите ваш код ниже
	// 1. Добавьте существующие имена пользователей в множество
	// 2. Обработайте каждую попытку регистрации
	// 3. Выведите результаты регистрации для каждой попытки
	// 4. Рассчитайте и выведите сводку
	// 5. Выведите список всех зарегистрированных имен пользователей (не забудьте отсортировать для стабильного вывода)
	
}

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