Повторение — уникальные имена пользователей
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 37 из 68.
Задание
ЛегкоСоздай систему регистрации имён пользователей, которая предотвращает дублирование имён с помощью идиоматического использования множеств в Go. В этом задании демонстрируется, как создать надёжную систему управления пользователями, обеспечивающую уникальность имён пользователей при всех регистрациях.
Ты получишь два входных значения:
- Строку с уже существующими именами пользователей, разделёнными запятыми (например,
"alice123,bob_dev,charlie2024,diana_codes") - Строку с попытками регистрации новых имён пользователей, разделёнными запятыми (например,
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Твоя задача:
- Создать множество с помощью идиоматической конструкции Go
map[string]struct{}для хранения зарегистрированных имён пользователей - Разобрать первую входную строку, разделив её по запятым, чтобы получить существующие имена пользователей
- Добавить каждое существующее имя пользователя в множество, используя пустой литерал структуры
{}в качестве значения - Разобрать вторую входную строку, разделив её по запятым, чтобы получить попытки регистрации новых имён пользователей
- Для каждой попытки регистрации проверить с помощью идиомы comma ok, существует ли уже имя пользователя в множестве
- Отобразить результат каждой попытки регистрации:
- Если имя пользователя доступно:
"Registered: [username]"и добавить его в множество - Если имя пользователя уже существует:
"Username taken: [username]"
- Если имя пользователя доступно:
- После обработки всех попыток регистрации отобразить подробную сводку:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- Наконец, вывести список всех зарегистрированных в системе имён пользователей:
- Заголовок:
"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. Выведите список всех зарегистрированных имён пользователей (не забудьте отсортировать их для единообразного вывода)
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведение6Идиоматический Go: множества
Идиома множества в GoСоздание множестваДобавление элементов в множествоПроверка наличия элементаУдаление элемента из множестваПеребор элементов множестваПовторение — уникальные имена пользователейПотренируйтесь самостоятельно: Онлайн-компилятор Go