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.

challenge icon

Desafio

Fácil

Crie um sistema de registro de nomes de usuário que impeça nomes de usuário duplicados usando o idiomático set do Go. Este desafio demonstra como criar um sistema robusto de gerenciamento de usuários que garante a exclusividade dos nomes de usuário em todos os registros.

Você receberá duas entradas:

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

Sua tarefa é:

  1. Criar um set usando o idiomático map[string]struct{} do Go para armazenar os 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 set usando o literal de struct vazio {} como valor
  4. Analisar a segunda string de entrada dividindo-a por vírgulas para obter as tentativas de novos registros
  5. Para cada tentativa de registro, verificar se o nome de usuário já existe no set usando o idiomático 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 set
    • Se o nome de usuário já existir: "Username taken: [username]"
  7. Depois de 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 idiomático set do Go oferece uma solução eficiente para impedir duplicatas em sistemas de registro de usuários, garantindo a integridade dos dados e proporcionando um desempenho rápido de busca para a 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

Pratique por conta própria: Compilador de Go online