Menu
Coddy logo textTech

Recapitulação - Nomes de Usuário Únicos

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 37 de 68.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Crie um sistema de registro de nomes de usuário que evite nomes duplicados usando o idioma de conjunto (set) do Go. Este desafio demonstra como criar um sistema robusto de gerenciamento de usuários que garante a unicidade do nome de usuário em todos os registros.

Você receberá duas entradas:

  • Uma string contendo nomes de usuário existentes separados por vírgulas (ex: "alice123,bob_dev,charlie2024,diana_codes")
  • Uma string contendo novas tentativas de registro de nomes de usuário separadas por vírgulas (ex: "eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")

Sua tarefa é:

  1. Criar um conjunto usando o idioma do Go map[string]struct{} para armazenar nomes de usuário registrados
  2. Analisar a primeira string de entrada dividindo-a por vírgulas para obter os nomes de usuário existentes
  3. Adicionar cada nome de usuário existente ao seu conjunto usando o literal de struct vazia {} como valor
  4. Analisar a segunda string de entrada dividindo-a por vírgulas para obter as novas tentativas de registro
  5. Para cada tentativa de registro, verificar se o nome de usuário já existe no conjunto usando o idioma comma ok
  6. Exibir o processo de registro para cada tentativa:
    • Se o nome de usuário estiver disponível: "Registered: [username]" e adicioná-lo ao conjunto
    • Se o nome de usuário já existir: "Username taken: [username]"
  7. Após processar todas as tentativas de registro, exibir um resumo abrangente:
    • "Registration Summary:"
    • "Initial usernames: [initial_count]"
    • "Registration attempts: [attempts_count]"
    • "Successful registrations: [successful_count]"
    • "Rejected (duplicate): [rejected_count]"
    • "Total registered usernames: [total_count]"
  8. Por fim, listar todos os nomes de usuário registrados no sistema:
    • Cabeçalho: "All registered usernames:"
    • Cada nome de usuário em uma linha separada: "@[username]"

Use o pacote strings para dividir as strings de entrada por vírgulas. Este desafio demonstra como o idioma de conjunto do Go fornece uma solução eficiente para evitar duplicatas em sistemas de registro de usuários, garantindo a integridade dos dados e fornecendo desempenho de busca rápido para validação de nomes de usuário.

Experimente você mesmo

package main

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

func main() {
	// Ler a entrada
	var existingUsernames string
	var newRegistrations string
	fmt.Scanln(&existingUsernames)
	fmt.Scanln(&newRegistrations)
	
	// Analisar as strings de entrada
	existing := strings.Split(existingUsernames, ",")
	attempts := strings.Split(newRegistrations, ",")
	
	// Criar um conjunto usando o idioma do Go
	userSet := make(map[string]struct{})
	
	// TODO: Escreva seu código abaixo
	// 1. Adicionar nomes de usuário existentes ao conjunto
	// 2. Processar cada tentativa de registro
	// 3. Exibir os resultados do registro para cada tentativa
	// 4. Calcular e exibir o resumo
	// 5. Listar todos os nomes de usuário registrados (lembre-se de ordenar para uma saída consistente)
	
}

Todas as lições de Lógica & Fluxo