Resposta A: OpenAI GPT-5.4
import re from collections import defaultdict def analyze_logs(log_data): """ Analisa uma string de log de várias linhas e retorna um dicionário de resumo com: - counts_by_level: contagens de entradas de log por nível de log em maiúsculas - successful_logins: nomes de usuário exclusivos que fizeram login com sucesso - failed_login_ips: contagens de tentativas de login falhadas por endereço IP Linhas malformadas ou irrelevantes são ignoradas. """ counts_by_level = defaultdict(int) successful_logins = set() failed_login_ips = defaultdict(int) # Corresponde a lin...
Mostrar resposta completa ▼
import re from collections import defaultdict def analyze_logs(log_data): """ Analisa uma string de log de várias linhas e retorna um dicionário de resumo com: - counts_by_level: contagens de entradas de log por nível de log em maiúsculas - successful_logins: nomes de usuário exclusivos que fizeram login com sucesso - failed_login_ips: contagens de tentativas de login falhadas por endereço IP Linhas malformadas ou irrelevantes são ignoradas. """ counts_by_level = defaultdict(int) successful_logins = set() failed_login_ips = defaultdict(int) # Corresponde a linhas como: [TIMESTAMP] LEVEL: MESSAGE log_line_pattern = re.compile( r"^\ между(?P<timestamp>[^\]]+)\]\s+(?P<level>[A-Za-z]+)\s*:\s*(?P<message>.*)$" ) # Exemplo de login bem-sucedido: Usuário 'alice' fez login do IP '192.168.1.10' success_pattern = re.compile( r"User\s+'([^']+)'\s+logged\s+in\b", re.IGNORECASE, ) # Exemplo de login falhado: Tentativa de login falhada para o usuário 'bob' do IP '203.0.113.5' failed_pattern = re.compile( r"Failed\s+login\s+attempt\s+for\s+user\s+'[^']+'\s+from\s+IP\s+'([^']+)'", re.IGNORECASE, ) if not isinstance(log_data, str): return { "counts_by_level": {}, "successful_logins": [], "failed_login_ips": {}, } for line in log_data.splitlines(): line = line.strip() if not line: continue match = log_line_pattern.match(line) if not match: continue level = match.group("level").upper() message = match.group("message") counts_by_level[level] += 1 success_match = success_pattern.search(message) if success_match: successful_logins.add(success_match.group(1)) failed_match = failed_pattern.search(message) if failed_match: failed_login_ips[failed_match.group(1)] += 1 return { "counts_by_level": dict(counts_by_level), "successful_logins": sorted(successful_logins), "failed_login_ips": dict(failed_login_ips), } # Exemplo de uso: if __name__ == "__main__": sample_logs = """ [2023-10-27T10:00:00Z] INFO: Server starting up. [2023-10-27T10:01:00Z] INFO: User 'alice' logged in from IP '192.168.1.10' [2023-10-27T10:02:30Z] WARN: Failed login attempt for user 'bob' from IP '203.0.113.5' This is not a valid log line and should be ignored. [2023-10-27T10:03:00Z] error: Database connection failed. [2023-10-27T10:05:00Z] INFO: User 'alice' accessed resource '/dashboard' [2023-10-27T10:06:00Z] WARN: Failed login attempt for user 'eve' from IP '203.0.113.5' [2023-10-27T10:07:00Z] INFO: User 'charlie' logged in from IP '198.51.100.2'""" print(analyze_logs(sample_logs))
Resultado
Votos de vitoria
3 / 3
Pontuacao media
Pontuacao total
Comentario geral
A Resposta A fornece uma solução altamente robusta e bem projetada. Implementa corretamente toda a lógica de análise, lida com a insensibilidade a maiúsculas e minúsculas para níveis de log e usa `re.IGNORECASE` para a análise de mensagens, tornando-a resiliente a variações. O uso de `defaultdict` e `set` é eficiente e Pythonic. Também inclui uma verificação do tipo de entrada e ordena os logins bem-sucedidos para uma saída consistente, demonstrando atenção aos detalhes e às melhores práticas.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%A Resposta A está totalmente correta, analisando com precisão todos os componentes de log e agregando dados conforme necessário. Lida corretamente com a insensibilidade a maiúsculas e minúsculas para níveis de log e usa `re.IGNORECASE` para padrões de mensagens, garantindo uma correspondência robusta.
Completude
Peso 20%A Resposta A implementa completamente todos os recursos necessários, incluindo análise robusta de linhas de log, contagem de níveis insensível a maiúsculas e minúsculas e extração precisa de detalhes de login bem-sucedidos/falhados. Também inclui uma verificação do tipo de entrada para maior completude.
Qualidade do codigo
Peso 20%A Resposta A demonstra excelente qualidade de código. Usa `defaultdict` e `set` para agregação eficiente de dados, `re.compile` para eficiência de regex, grupos nomeados para legibilidade e `re.IGNORECASE` para correspondência robusta de padrões. O código é limpo, bem estruturado e inclui uma docstring útil.
Valor pratico
Peso 15%A Resposta A tem alto valor prático devido ao seu design robusto. Pode lidar com vários formatos de linha de log, incluindo variações de maiúsculas e minúsculas em mensagens, e gerencia graciosamente linhas malformadas e entrada não string, tornando-a adequada para cenários de análise de log do mundo real.
Seguimento de instrucoes
Peso 10%A Resposta A segue todas as instruções com precisão. Lida corretamente com a insensibilidade a maiúsculas e minúsculas para níveis de log e ignora robustamente linhas malformadas. O uso de `re.IGNORECASE` para padrões de mensagens, embora não explicitamente declarado para mensagens, alinha-se com o requisito de 'robusto'. Também usa estruturas de dados apropriadas e ordena a lista final para consistência.
Pontuacao total
Comentario geral
Fornece uma implementação robusta e correta com análise clara baseada em regex, normalização de nível insensível a maiúsculas e minúsculas e omissão graciosa de linhas malformadas. Usa estruturas de dados apropriadas (defaultdict, set) e retorna dicionários simples. Pequena observação: retorna logins bem-sucedidos ordenados (não exigido) e inclui uso de exemplo além da função solicitada, mas isso não prejudica os requisitos principais.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%Extrai corretamente níveis de log em maiúsculas, conta-os, encontra nomes de usuário de login bem-sucedidos únicos e conta IPs de login com falha; os padrões se alinham com o prompt e lidam com variações de maiúsculas/minúsculas nas mensagens.
Completude
Peso 20%Cobre todas as saídas exigidas e ignora explicitamente linhas malformadas; também lida com entrada não string retornando um resumo de formato vazio.
Qualidade do codigo
Peso 20%Bem estruturado com regex nomeadas e compiladas e coleções apropriadas; legível e de fácil manutenção. Leve exagero com bloco principal de exemplo extra e ordenação desnecessária de nomes de usuário (embora inofensivo).
Valor pratico
Peso 15%Prático para logs reais: lida com variantes de maiúsculas/minúsculas, linhas malformadas e entrada não string de forma segura; processamento em passagem única e estruturas de dados sensatas.
Seguimento de instrucoes
Peso 10%Implementa a função e o comportamento solicitados, incluindo análise de nível insensível a maiúsculas/minúsculas e omissão graciosa de linhas malformadas; retorna as chaves exigidas. Adiciona uso de exemplo, mas não entra em conflito com os requisitos.
Pontuacao total
Comentario geral
A Resposta A é uma solução bem estruturada, correta e robusta. Utiliza grupos nomeados em regex para legibilidade, defaultdict para contagem mais limpa, compila padrões regex fora do loop para eficiência, inclui validação de tipo de entrada, ordena a lista successful_logins para saída determinística, converte defaultdicts de volta para dicionários regulares para saída limpa e inclui uma docstring abrangente e exemplo de uso. O uso de re.IGNORECASE nos padrões de login adiciona robustez extra. O código é limpo e pronto para produção.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%Produz saída correta para a entrada de exemplo e lida bem com casos extremos. Os padrões regex são bem elaborados com grupos nomeados e sinalizadores de insensibilidade a maiúsculas e minúsculas. A validação de tipo de entrada adiciona correção para entradas inesperadas.
Completude
Peso 20%Lida com todos os recursos necessários: counts_by_level, successful_logins (únicos, ordenados), failed_login_ips. Também lida graciosamente com entrada não string, linhas vazias e linhas malformadas. Inclui exemplo de uso com bloco __main__.
Qualidade do codigo
Peso 20%Excelente qualidade de código: padrões regex compilados para eficiência, grupos nomeados para legibilidade, defaultdict para contagem limpa, docstring abrangente, saída ordenada para determinismo, conversão adequada de defaultdicts para dicionários regulares e separação limpa de responsabilidades.
Valor pratico
Peso 15%Altamente prático: validação de entrada robusta, saída ordenada determinística, regex compilado eficiente e exemplo de uso o tornam pronto para uso em produção. Os sinalizadores re.IGNORECASE nos padrões de login adicionam robustez no mundo real.
Seguimento de instrucoes
Peso 10%Segue todas as instruções precisamente: assinatura de função correta, formato de saída correto com todas as três chaves, nível de análise de nível insensível a maiúsculas e minúsculas armazenado como maiúsculas, nomes de usuário únicos como uma lista, tratamento gracioso de linhas malformadas e usa regex conforme recomendado.