Menu
CoddyTech

Ôn tập: tên người dùng duy nhất

Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 37 trên 68.

challenge icon

Thử thách

Dễ

Xây dựng hệ thống đăng ký tên người dùng để ngăn tên trùng lặp bằng cách dùng thành ngữ tập hợp của Go. Thử thách này minh họa cách tạo hệ thống quản lý người dùng mạnh mẽ, đảm bảo tên người dùng luôn duy nhất trong mọi lượt đăng ký.

Bạn sẽ nhận được hai đầu vào:

  • Một chuỗi chứa các tên người dùng hiện có, được phân tách bằng dấu phẩy (ví dụ: "alice123,bob_dev,charlie2024,diana_codes")
  • Một chuỗi chứa các lần thử đăng ký tên người dùng mới, được phân tách bằng dấu phẩy (ví dụ: "eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")

Nhiệm vụ của bạn:

  1. Tạo một tập hợp bằng thành ngữ Go map[string]struct{} để lưu tên người dùng đã đăng ký
  2. Phân tích chuỗi đầu vào thứ nhất bằng cách tách chuỗi tại dấu phẩy để lấy các tên người dùng hiện có
  3. Thêm từng tên người dùng hiện có vào tập hợp bằng cách dùng giá trị struct rỗng {}
  4. Phân tích chuỗi đầu vào thứ hai bằng cách tách chuỗi tại dấu phẩy để lấy các lần thử đăng ký mới
  5. Với mỗi lần thử đăng ký, kiểm tra xem tên người dùng đã có trong tập hợp chưa bằng thành ngữ comma ok
  6. Hiển thị quá trình đăng ký cho từng lần thử:
    • Nếu tên người dùng còn khả dụng: "Registered: [username]" và thêm tên đó vào tập hợp
    • Nếu tên người dùng đã tồn tại: "Username taken: [username]"
  7. Sau khi xử lý tất cả các lần thử đăng ký, hiển thị bản tóm tắt đầy đủ:
    • "Registration Summary:"
    • "Initial usernames: [initial_count]"
    • "Registration attempts: [attempts_count]"
    • "Successful registrations: [successful_count]"
    • "Rejected (duplicate): [rejected_count]"
    • "Total registered usernames: [total_count]"
  8. Cuối cùng, liệt kê tất cả tên người dùng đã đăng ký trong hệ thống:
    • Dòng tiêu đề: "All registered usernames:"
    • Mỗi tên người dùng trên một dòng riêng: "@[username]"

Dùng package strings để tách các chuỗi đầu vào tại dấu phẩy. Thử thách này minh họa cách thành ngữ tập hợp của Go giúp ngăn trùng lặp hiệu quả trong hệ thống đăng ký người dùng, đảm bảo tính toàn vẹn dữ liệu và cho phép tra cứu nhanh khi xác thực tên người dùng.

Tự làm thử

package main

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

func main() {
	// Đọc đầu vào
	var existingUsernames string
	var newRegistrations string
	fmt.Scanln(&existingUsernames)
	fmt.Scanln(&newRegistrations)
	
	// Phân tích các chuỗi đầu vào
	existing := strings.Split(existingUsernames, ",")
	attempts := strings.Split(newRegistrations, ",")
	
	// Tạo tập hợp theo cách thông dụng trong Go
	userSet := make(map[string]struct{})
	
	// TODO: Viết code bên dưới
	// 1. Thêm các tên người dùng hiện có vào tập hợp
	// 2. Xử lý từng lần đăng ký
	// 3. Hiển thị kết quả của từng lần đăng ký
	// 4. Tính và hiển thị phần tổng kết
	// 5. Liệt kê tất cả tên người dùng đã đăng ký (nhớ sắp xếp để đầu ra luôn nhất quán)
	
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Go online