Menu
Coddy logo textTech

Podsumowanie – unikalne nazwy użytkowników

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 37 z 68.

challenge icon

Wyzwanie

Łatwy

Zbuduj system rejestracji nazw użytkowników, który zapobiega duplikatom, wykorzystując idiom zbioru w Go. To wyzwanie pokazuje, jak utworzyć solidny system zarządzania użytkownikami, który zapewnia unikalność nazw użytkowników we wszystkich rejestracjach.

Otrzymasz dwa wejścia:

  • Ciąg zawierający istniejące nazwy użytkowników oddzielone przecinkami (np. "alice123,bob_dev,charlie2024,diana_codes")
  • Ciąg zawierający próby rejestracji nowych nazw użytkowników oddzielone przecinkami (np. "eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")

Twoim zadaniem jest:

  1. Utworzyć zbiór przy użyciu idiomu Go map[string]struct{}, aby przechowywać zarejestrowane nazwy użytkowników
  2. Przeanalizować pierwszy ciąg wejściowy, dzieląc go po przecinkach, aby uzyskać istniejące nazwy użytkowników
  3. Dodać każdą istniejącą nazwę użytkownika do zbioru, używając pustego literału struktury {} jako wartości
  4. Przeanalizować drugi ciąg wejściowy, dzieląc go po przecinkach, aby uzyskać próby rejestracji nowych nazw użytkowników
  5. Dla każdej próby rejestracji sprawdzić, czy nazwa użytkownika już istnieje w zbiorze, używając idiomu comma ok
  6. Wyświetlić przebieg rejestracji dla każdej próby:
    • Jeśli nazwa użytkownika jest dostępna: "Registered: [username]" i dodać ją do zbioru
    • Jeśli nazwa użytkownika już istnieje: "Username taken: [username]"
  7. Po przetworzeniu wszystkich prób rejestracji wyświetlić pełne podsumowanie:
    • "Registration Summary:"
    • "Initial usernames: [initial_count]"
    • "Registration attempts: [attempts_count]"
    • "Successful registrations: [successful_count]"
    • "Rejected (duplicate): [rejected_count]"
    • "Total registered usernames: [total_count]"
  8. Na koniec wyświetlić wszystkie zarejestrowane w systemie nazwy użytkowników:
    • Nagłówek: "All registered usernames:"
    • Każda nazwa użytkownika w osobnym wierszu: "@[username]"

Użyj pakietu strings, aby podzielić ciągi wejściowe po przecinkach. To wyzwanie pokazuje, jak idiom zbioru w Go zapewnia wydajne rozwiązanie zapobiegające duplikatom w systemach rejestracji użytkowników, gwarantując integralność danych i szybkie wyszukiwanie podczas weryfikacji nazw użytkowników.

Spróbuj swoich sił

package main

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

func main() {
	// Odczytaj dane wejściowe
	var existingUsernames string
	var newRegistrations string
	fmt.Scanln(&existingUsernames)
	fmt.Scanln(&newRegistrations)
	
	// Przetwórz wejściowe ciągi znaków
	existing := strings.Split(existingUsernames, ",")
	attempts := strings.Split(newRegistrations, ",")
	
	// Utwórz zbiór w sposób idiomatyczny dla Go
	userSet := make(map[string]struct{})
	
	// TODO: Napisz kod poniżej
	// 1. Dodaj istniejące nazwy użytkowników do zbioru
	// 2. Przetwórz każdą próbę rejestracji
	// 3. Wyświetl wynik każdej próby rejestracji
	// 4. Oblicz i wyświetl podsumowanie
	// 5. Wypisz wszystkie zarejestrowane nazwy użytkowników (pamiętaj o sortowaniu, aby wyniki były zawsze w tej samej kolejności)
	
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online