Orivel Orivel
Abrir menu

Últimas tarefas e discussões

Explore o conteúdo de benchmark mais recente de tarefas e discussões. Filtre por género para focar no que você quer comparar.

Gêneros de comparação

Lista de modelos

Programação

Anthropic Claude Sonnet 5 VS OpenAI GPT-5.6

Analisador de Logs de Servidor Web

Escreva uma função Python analyze_logs(log_data) que recebe uma string de múltiplas linhas contendo entradas de logs de servidor web. A função deve analisar esses logs, executar uma análise e retornar um dicionário resumindo os resultados. Cada linha de log válida segue este formato: [TIMESTAMP] LEVEL IP_ADDRESS "REQUEST_METHOD /path" RESPONSE_CODE BYTES_SENT Exemplo de uma linha válida: [2023-10-27T10:00:00Z] INFO 192.168.1.1 "GET /index.html" 200 1543 Sua função deve: Analisar apenas as linhas de log válidas, ignorando graciosamente quaisquer linhas malformadas ou vazias. Calcular as seguintes métricas: total_requests: A contagem total de entradas de log válidas. error_rate: A porcentagem de requisições com LEVEL igual a ERROR, arredondada para duas casas decimais. top_3_ips: Uma lista de tuplas, onde cada tupla contém um endereço IP e sua contagem de requisições, para os 3 IPs mais frequentes. A lista deve estar ordenada em ordem decrescente pela contagem de requisições. busiest_hour: A hora do dia (um inteiro de 0 a 23) que teve mais requisições. O timestamp está no formato ISO 8601 (UTC). Retornar um dicionário com as chaves total_requests, error_rate, top_3_ips e busiest_hour contendo os valores calculados. Trate os seguintes casos extremos: Se a string de entrada log_data estiver vazia, retorne um dicionário com valores zerados ou vazios conforme apropriado (por exemplo, total_requests: 0, top_3_ips: []). Se houver menos de 3 endereços IP únicos, a lista top_3_ips deve conter todos os IPs únicos, ordenados por contagem. Se houver empate para a hora de maior tráfego, retornar qualquer uma das horas empatadas é aceitável.

262
25 Jul 2026 01:19

Programação

OpenAI GPT-5.6 VS Google Gemini 2.5 Pro

Limitador de taxa com janela deslizante e quotas justas multi-inquilino

Implemente uma biblioteca reutilizável de limitador de taxa numa linguagem à sua escolha (Python, Go, TypeScript, Java ou Rust) que imponha quotas de requisições por cliente usando um algoritmo de janela deslizante, além de uma política de partilha justa entre múltiplos inquilinos. Requisitos funcionais: Forneça uma classe ou módulo com um método tal como allow(tenant_id, client_id, now_ms) que retorne se uma requisição é permitida e, quando negada, quantos milissegundos faltam até que a próxima requisição seja permitida (retry_after_ms). Cada cliente é limitado a um número máximo de requisições dentro de uma janela de tempo rolling (por exemplo, 100 requisições por 60.000 ms). A configuração deve ser ajustável por inquilino. Implemente uma verdadeira janela deslizante (ponderada ou baseada em log), não uma janela de baldes fixa por calendário, de modo que rajadas que atravessam os limites dos baldes sejam tratadas corretamente. Adicione um teto global por inquilino de forma que todos os clientes de um inquilino combinados não possam exceder um limite a nível de inquilino, e quando o inquilino estiver saturado a capacidade restante seja compartilhada de maneira justa entre os clientes ativos em vez de ser monopolizada por um cliente. O limitador deve ser seguro sob acesso concorrente a partir de múltiplas threads ou tarefas assíncronas. A memória não deve crescer sem limites: o estado de clientes obsoletos deve ser expurgado ou compactado ao longo do tempo. Entregáveis: A implementação completa com API pública clara e documentação inline das decisões-chave. Uma breve explicação (em comentários ou numa curta seção em prosa) do algoritmo de janela deslizante escolhido e suas compensações entre precisão/memória. Uma suíte de testes cobrindo os casos limite principais descritos abaixo. Casos limite a tratar explicitamente no código e nos testes: Requisições exatamente na fronteira da janela. Um cliente que fica ocioso e depois retorna após a janela ter expirado completamente. Requisições concorrentes competindo pelo mesmo contador de cliente. Relógio retrocedendo ou timestamps duplicados. Saturação do inquilino e redistribuição justa entre clientes concorrentes. Expurgo de estado de cliente obsoleto sem eliminar clientes ativos. Declare quaisquer suposições que fizer (single-process vs distributed, disponibilidade de relógio monotónico, etc.). Se assumir um processo único, descreva brevemente como o design se estenderia para um deployment distribuído.

269
16 Jul 2026 09:49

Programação

Anthropic Claude Opus 4.8 VS Google Gemini 2.5 Flash

Implemente um Simulador Determinístico de Livro de Ordens Limite

Escreva uma solução de arquivo único em Python 3.11 implementando a função process_events(events: list[dict]) -> dict. Não use pacotes externos. A função deve simular um pequeno livro de ordens limite de uma bolsa para um instrumento. Ela recebe uma lista de dicionários de eventos na ordem de entrada e retorna um dicionário com exatamente estas chaves: trades, rejected, book. Tipos de evento: Evento de nova ordem: Campos obrigatórios: type="new", id, side, order_type, qty. side é "buy" ou "sell". order_type é "limit" ou "market". qty é um inteiro positivo. Uma ordem limit também requer price, um número inteiro positivo de centavos. Campo opcional tif é time-in-force: "GTC", "IOC", ou "FOK". Se ausente, use "GTC" para ordens limit e "IOC" para ordens market. Ordens market não podem ter tif="GTC" e não podem ficar repousando no livro. Evento de cancelamento: Campos obrigatórios: type="cancel", id. Cancela a quantidade restante de uma ordem atualmente repousando com esse id. Regras de pareamento: O livro tem bids e asks. Ordens limit buy repousadas são bids; ordens limit sell repousadas são asks. Prioridade preço-tempo é obrigatória: melhor preço primeiro; para o mesmo preço, a ordem repousada aceita mais cedo primeiro. Uma ordem buy casa com asks repousados enquanto puder cruzar: buy market cruza qualquer ask; buy limit cruza asks com preço do ask <= preço limit do buy. Uma ordem sell casa com bids repousados enquanto puder cruzar: sell market cruza qualquer bid; sell limit cruza bids com preço do bid >= preço limit do sell. A quantidade de cada trade é min(quantidade restante do entrante, quantidade restante do repousado). O preço do trade é sempre o preço limit da ordem maker repousada, nunca o preço da ordem entrante. Um registro de trade deve ser anexado imediatamente quando ocorrer, com exatamente estas chaves: buy_id, sell_id, price, qty, taker_id, maker_id. Ordens repousadas parcialmente preenchidas mantêm sua prioridade original com a quantidade restante. Ordens totalmente preenchidas deixam o livro. Comportamento de time-in-force: Ordens limit GTC mantêm qualquer restante não preenchido no livro. Ordens IOC executam o máximo possível imediatamente e então cancelam qualquer restante. Ordens FOK devem ser completamente passíveis de preenchimento imediatamente de acordo com o livro atual e as regras de cruzamento. Se não puderem ser totalmente preenchidas, não produzem trades e não alteram o livro. Se completamente preenchíveis, executam normalmente. Ordens FOK nunca repousam. Regras de validação e rejeição: Se um evento estiver malformado, rejeite-o sem alterar o livro. Anexe um registro de rejeição a rejected com chaves input_index, event, reason. O reason pode ser uma string curta e legível por humanos. Rejeite uma nova ordem se seu id já tiver sido usado por qualquer new order previamente aceita, mesmo que essa ordem anterior já tenha sido preenchida ou cancelada desde então. Rejeite eventos de cancelamento para ids desconhecidos ou ids que não estejam mais repousando. Rejeite qty e price não inteiros, zero ou negativos. Em Python, bool não deve ser aceito como inteiro para esses campos. Ignore campos extras em eventos que seriam de outra forma válidos. Formato de retorno: trades: lista de registros de trade na ordem de execução. rejected: lista de registros de rejeição na ordem de entrada. book: um dicionário com chaves bids e asks. book["bids"] deve listar todos os bids repousados ordenados por preço descendente, depois por tempo original de repouso, cada um como {"id": id, "price": price, "qty": remaining_qty}. book["asks"] deve listar todos os asks repousados ordenados por preço ascendente, depois por tempo original de repouso, cada um como {"id": id, "price": price, "qty": remaining_qty}. Sua resposta deve ser um código Python executável completo definindo process_events. Você pode incluir classes/funções auxiliares e uma pequena seção de auto-teste protegida por if name == "main":, mas a função principal não deve ler stdin nem escrever stdout.

294
29 Jun 2026 09:44

Programação

Anthropic Claude Opus 4.8 VS Google Gemini 2.5 Pro

Implementar aplicação atômica de JSON Patch em Python

Escreva uma implementação em Python 3.11 de uma função denominada apply_json_patch(document, patch) que aplique uma sequência de operações no estilo JSON Patch a um valor compatível com JSON e retorne o valor patchado. O documento de entrada pode ser qualquer combinação de dict, list, str, int, float, bool e None. O patch é uma lista de dicionários de operações. A implementação não deve mutar o documento original nem qualquer objeto aninhado alcançável a partir dele. Se qualquer operação for inválida, a função deve lançar uma classe de exceção personalizada chamada JsonPatchError e deixar o documento original inalterado. Operações suportadas: add, remove, replace, move, copy e test. Use caminhos JSON Pointer com tokens separados por barras, onde a string vazia identifica o documento inteiro, os tokens decodificam ~1 como / e ~0 como ~, e qualquer outro uso de ~ é inválido. Para objetos, um token de caminho é uma chave. Para arrays, um token de caminho deve ser um inteiro não negativo sem zeros à esquerda, exceto o token único 0; apenas para add, o token final pode ser - para anexar. A operação add insere em arrays em um índice de 0 até len(array), anexa para '-', define uma chave de objeto, ou substitui o documento inteiro se o caminho for vazio. A operação remove requer que o alvo exista e o elimina. A operação replace requer que o alvo exista e o substitui. A operação move requer os campos from e path, remove o valor em from e o adiciona em path, e deve rejeitar mover um valor para um dos seus próprios descendentes. A operação copy requer os campos from e path e faz uma cópia profunda (deep copy) do valor de origem para o alvo. A operação test requer value e só tem sucesso se o alvo atual for igual em profundidade (deeply equal) a value, incluindo a igualdade normal do Python para números e igualdade exata para strings, booleanos e None. Cada dicionário de operação deve conter exatamente os campos exigidos por essa operação mais o campo op; campos desconhecidos ou campos ausentes são erros. A função deve ser determinística, razoavelmente eficiente e depender somente da biblioteca padrão do Python. Inclua quaisquer funções auxiliares ou classes necessárias. Não escreva um programa de linha de comando nem use pacotes externos.

335
15 Jun 2026 09:43

Programação

OpenAI GPT-5.5 VS Google Gemini 2.5 Flash

Limitador de Taxa com Janela Deslizante e Tolerância a Rajada

Desenhe e implemente um limitador de taxa thread-safe numa linguagem à sua escolha (Python, Go, Java, TypeScript, ou Rust) que suporte os seguintes requisitos: API surface: Exponha pelo menos estas operações: allow(client_id: str, cost: int = 1) -> bool — retorna se a requisição é permitida neste momento. retry_after(client_id: str) -> float — retorna segundos até que pelo menos 1 unidade de capacidade esteja disponível (0 se atualmente permitido). Um construtor que aceite configuração por cliente: rate (unidades por segundo), burst (máx. unidades armazenadas), e um opcional window_seconds para contabilização por janela deslizante. Algorithm: Implemente um híbrido que combine um token bucket (para tolerância a rajadas) com um log ou contador de janela deslizante (para limitar o total de pedidos permitidos dentro de window_seconds, prevenindo abuso sustentado que um token bucket puro permitiria após reabastecimentos). Uma requisição é permitida somente se ambas as verificações passarem. Justifique sua escolha de estrutura de dados para a janela deslizante (log exato vs. aproximação ponderada de dois "buckets") e discuta trade-offs de memória/precisão num bloco curto de comentário ou nota acompanhante. Concurrency: O limitador será atingido por muitas threads/goroutines concorrentes para o mesmo e diferentes client_ids. Evite que um único lock global se torne um gargalo (por exemplo, locks por cliente ou lock striping). Documente por que sua abordagem está correta sob chamadas concorrentes a allow (nenhum duplo gasto de tokens, sem atualizações perdidas). Time source: Torne o relógio injetável para que os testes sejam determinísticos. Use um relógio monotônico por padrão. Edge cases to handle explicitly: cost maior que burst (deve rejeitar, nunca bloquear para sempre). Relógio retrocedendo ou pausas longas (ex.: VM suspensa): amarre (clamp) em vez de explodir, e não conceda tokens ilimitados. Primeiro pedido de um novo cliente (inicialização preguiçosa). Limpeza de clientes obsoletos (a memória não deve crescer indefinidamente se clientes pararem de chamar). Tokens fraccionários / temporização sub-milisegundo. Tests: Forneça pelo menos 6 testes unitários usando o relógio injetável que cubram: permitir/negar básico, drenagem e reabastecimento de rajada, cota de janela deslizante independente do reabastecimento do balde, cost > burst, contenção concorrente num cliente (propriedade determinística: total permitido em T segundos ≤ rate*T + burst), e evasão de cliente obsoleto. Complexity: Declare a complexidade amortizada de tempo de allow e a complexidade de memória por cliente. Entregue: código completo executável (um único ficheiro é aceitável, mas pode separar ficheiros se os identificar claramente), os testes, e uma breve nota de design (máx. ~250 palavras) explicando as suas escolhas e a semântica precisa quando os dois algoritmos discordarem.

458
12 May 2026 09:45

Programação

Anthropic Claude Opus 4.7 VS OpenAI GPT-5.4

Conversor de Subconjunto Markdown para HTML

Escreva uma função Python markdown_to_html(markdown_text: str) -> str que converta uma string contendo um subconjunto específico de Markdown em sua correspondente representação HTML. A função deve suportar os seguintes recursos: Elementos de Bloco: Cabeçalhos: Linhas que começam com # até ###### devem ser convertidas para as tags <h1> até <h6>. Listas Não Ordenadas: Linhas que começam com - devem ser convertidas em <ul> e <li> tags. Listas aninhadas, indentadas por dois espaços por nível, devem ser suportadas. Uma lista é terminada por uma linha em branco ou por um elemento de bloco diferente. Blocos de Código: Conteúdo entre linhas com três crases () deve ser convertido em `<pre><code>...</code></pre>`. O especificador de linguagem nas crases de abertura (por exemplo, python) deve ser ignorado. Nenhum outro processamento de Markdown deve ocorrer dentro de um bloco de código. Parágrafos: Qualquer outro texto deve ser envolvido em tags <p>. Linhas consecutivas de texto pertencem ao mesmo parágrafo. Parágrafos são separados por uma ou mais linhas em branco. Elementos Inline: Negrito e Itálico: ***text*** deve ser convertido em <strong><em>text</em></strong>. Negrito: **text** deve ser convertido em <strong>text</strong>. Itálico: *text* deve ser convertido em <em>text</em>. Regras e Restrições: Elementos inline podem ser aninhados dentro de cabeçalhos e itens de lista. O parser deve ser robusto a entradas malformadas ou complicadas, como tags inline não fechadas. Por exemplo, *italic deve ser renderizado como <p>*italic</p>. A ordem de precedência para elementos inline é ***, depois **, depois *. Assuma que a entrada é uma única string multilinha. Não implemente suporte para quaisquer outros recursos do Markdown, como links, imagens, blockquotes ou listas ordenadas. O HTML de saída não precisa ser um documento completo (não são necessárias tags <html> ou <body>). Exemplo de Entrada: # Header 1 This is a paragraph with **bold** and *italic* text. This is the same paragraph. - List item one - List item two with ***bold and italic*** - Nested list item - Back to the first level ```python def hello(): print("Hello, World!")

556
22 Apr 2026 09:40

Programação

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.4

Ferramenta de Sincronização de Arquivos por Linha de Comando

Escreva um script Python para uma ferramenta de sincronização de arquivos por linha de comando. O script deve aceitar três argumentos de linha de comando: source_path: O caminho para o diretório fonte. replica_path: O caminho para o diretório réplica que será sincronizado. log_file_path: O caminho para um ficheiro onde todas as operações serão registadas. Funcionalidade Principal: Sincronização Unidirecional: A ferramenta deve executar uma sincronização unidirecional, fazendo com que o diretório replica_path seja uma cópia exata do diretório source_path. Ficheiros e diretórios presentes na fonte mas não na réplica devem ser copiados para a réplica. Ficheiros e diretórios presentes na réplica mas não na fonte devem ser removidos da réplica. Ficheiros presentes em ambos os locais mas com conteúdos diferentes devem ser atualizados na réplica (a versão da fonte substitui a versão da réplica). Detecção de Alterações: Use o hash MD5 do conteúdo dos ficheiros para determinar se um ficheiro precisa ser atualizado. Não confie em carimbos de data/hora de modificação. Registo: Registe todas as operações de ficheiros (por exemplo, "COPY file.txt", "REMOVE old_dir", "UPDATE changed.log") tanto no console como no ficheiro de registo especificado. Cada entrada de registo deve ser marcada com data e hora. Execução: O script deve executar a operação de sincronização exatamente uma vez e depois terminar. Não deve correr em loop. Requisitos: Use Python 3. Use a biblioteca argparse para o parsing de argumentos de linha de comando. A solução deve tratar corretamente diretórios aninhados, diretórios vazios e ficheiros de vários tamanhos. O script deve ser um único ficheiro autocontido.

566
09 Apr 2026 09:38

Programação

Google Gemini 2.5 Flash VS OpenAI GPT-5.4

Implemente um cache LRU concorrente sem bloqueios

Implemente um cache LRU (Least Recently Used) seguro para uso por múltiplas threads em Python que suporte leituras e gravações concorrentes sem usar um bloqueio global para cada operação. Sua implementação deve satisfazer os seguintes requisitos: Interface: O cache deve suportar estas operações: __init__(self, capacity: int) — Inicializar o cache com uma capacidade máxima dada (inteiro positivo). get(self, key: str) -> Optional[Any] — Retornar o valor associado à chave se ela existir (e marcá-la como usada recentemente), ou retornar None se a chave não estiver no cache. put(self, key: str, value: Any) -> None — Inserir ou atualizar o par chave-valor. Se o cache exceder a capacidade após a inserção, remover o item menos recentemente usado. delete(self, key: str) -> bool — Remover a chave do cache. Retornar True se a chave estava presente, False caso contrário. keys(self) -> List[str] — Retornar uma lista de todas as chaves atualmente no cache, ordenadas da mais recentemente usada para a menos recentemente usada. Concorrência: O cache deve ser seguro para uso por múltiplas threads ao mesmo tempo. Busque um projeto que permita leituras concorrentes prosseguirem sem bloqueio mútuo quando possível (por exemplo, usando locks de leitura/gravação, bloqueios de granularidade fina ou técnicas sem bloqueio). Um mutex global único que serializa toda operação é considerado uma solução de base, porém subótima. Corretude sob contenção: Sob acesso concorrente, o cache nunca deve retornar dados obsoletos ou corrompidos, nunca deve exceder sua capacidade declarada e deve manter uma ordenação LRU consistente. Casos limite a tratar: Capacidade igual a 1 put com uma chave que já existe (deve atualizar o valor e mover para a posição de mais recente) delete de uma chave que não existe put e get concorrentes na mesma chave Evicções sequenciais rápidas quando muitas threads inserem simultaneamente Testes: Inclua uma função de teste run_tests() que demonstre a correção de todas as operações tanto em cenários single-threaded quanto multi-threaded. O teste multi-threaded deve usar pelo menos 8 threads realizando uma mistura de operações get, put e delete sobre chaves sobrepostas, e deve afirmar que o cache nunca excede a capacidade e que get nunca retorna um valor para uma chave que nunca foi inserida. Forneça sua implementação completa em Python. Use apenas a biblioteca padrão (nenhum pacote de terceiros). Inclua docstrings e comentários explicando sua estratégia de concorrência e quaisquer trade-offs de design que você adotou.

585
23 Mar 2026 17:47

Programação

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.2

Analisador Avançado de Arquivo de Log para um Formato Personalizado

Escreva uma função Python parse_log(log_content: str) -> list que analise um arquivo de log com um formato personalizado. A função deve receber o conteúdo do log como uma única string multilinha e retornar uma lista de dicionários, em que cada dicionário representa uma transação concluída com sucesso. Regras do Formato de Log: START <transaction_id> <timestamp>: Marca o início de uma transação. transaction_id é uma string sem espaços. timestamp é uma string no formato ISO 8601. END <transaction_id> <status> <timestamp>: Marca o fim de uma transação. O transaction_id deve corresponder a uma transação aberta. status é uma palavra única (por exemplo, SUCCESS, FAIL). EVENT <key1>=<value1> <key2>="<value with spaces>" ...: Representa um evento dentro da transação ativa atual. Consiste em um ou mais pares chave-valor. Valores que contêm espaços devem estar entre aspas duplas. COMMENT # <any text>: Uma linha de comentário que deve ser ignorada. Lógica de Processamento: A função deve processar as linhas de forma sequencial. Uma linha EVENT está associada à transação iniciada mais recentemente que ainda não foi finalizada. Uma transação é considerada completa e válida somente se tiver uma linha START e uma linha END correspondentes com o mesmo transaction_id. A saída deve ser uma lista de dicionários. Cada dicionário representa uma transação concluída e deve ter as seguintes chaves: transaction_id (string) start_time (string) end_time (string) status (string) events (uma lista de dicionários, onde cada dicionário interno representa os pares chave-valor de uma linha EVENT). Tratamento de Erros e Casos de Borda: Ignore quaisquer linhas COMMENT, linhas em branco ou linhas malformadas que não correspondam aos formatos especificados. Ignore qualquer EVENT que ocorra fora de uma transação ativa (ou seja, antes do primeiro START ou após uma transação ter sido fechada). Se uma nova linha START aparecer antes da transação anterior ter sido fechada com um END, a transação anterior é considerada "abandonada" e deve ser descartada. A nova linha START inicia uma nova transação. Qualquer transação que permaneça aberta ao final do arquivo de log também é considerada "abandonada" e não deve ser incluída na saída final.

563
23 Mar 2026 08:42

Programação

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5 mini

Implemente um Limitador de Taxa Concorrente com Janela Deslizante e Filas de Prioridade

Desenhe e implemente um limitador de taxa seguro para threads em Python que suporte as seguintes funcionalidades: Controle de Taxa com Janela Deslizante: O limitador deve usar um algoritmo de janela deslizante (não janelas fixas) para rastrear contagens de requisições. Dado um máximo de max_requests permitido dentro de um período de tempo window_seconds, ele deve determinar com precisão se uma nova requisição é permitida em qualquer momento. Múltiplos Níveis (Tiers): O limitador deve suportar múltiplos níveis nomeados (por exemplo, "free", "standard", "premium"), cada um com sua própria configuração de max_requests e window_seconds. Clientes são atribuídos a um nível no momento do registro. Fila de Prioridade para Requisições Adiadas: Quando uma requisição é limitada pela taxa, em vez de simplesmente rejeitá-la, o limitador deve enfileirá-la em uma fila de prioridade por nível. Cada requisição tem uma prioridade inteira (número menor = maior prioridade). O limitador deve fornecer um método que, quando houver capacidade disponível, desenfileira e processa a requisição em espera de maior prioridade para um determinado cliente. Segurança para Threads: Todas as operações (allow_request, enqueue, dequeue, register_client) devem ser seguras para chamadas concorrentes a partir de múltiplas threads. Limpeza (Cleanup): Forneça um método para remover dados de rastreamento expirados para clientes que não fizeram requisições nos últimos cleanup_threshold_seconds (configurável). Sua implementação deve incluir: Uma classe RateLimiter com a interface descrita. Um Request dataclass ou named tuple contendo no mínimo: client_id, timestamp, priority e payload. Tratamento adequado de casos de borda: registro duplicado de cliente, requisições para clientes não registrados, filas de prioridade vazias, modificações concorrentes e questões de precisão do relógio. Também escreva um script de demonstração (no bloco if __name__ == "__main__") que: Crie um limitador de taxa com pelo menos dois níveis. Registre vários clientes. Simule um estouro de requisições a partir de múltiplas threads, mostrando algumas sendo permitidas e outras sendo enfileiradas. Mostre requisições adiadas sendo processadas quando a capacidade for liberada. Imprima saídas claras mostrando a sequência de eventos. Explique suas escolhas de design em comentários, especialmente a respeito de sua implementação da janela deslizante, sua escolha de primitivas de sincronização e quaisquer trade-offs que você fez entre precisão e desempenho.

609
21 Mar 2026 08:40

Programação

Google Gemini 2.5 Pro VS OpenAI GPT-5.2

Implemente um Limitador de Taxa Concorrente com Janela Deslizante e Filas de Prioridade

Desenhe e implemente um limitador de taxa (rate limiter) thread-safe em Python que suporte as seguintes funcionalidades: Limitação de Taxa com Janela Deslizante: Em vez de usar janelas de tempo fixas, implemente um algoritmo de janela verdadeiramente deslizante. Cada cliente (identificado por uma chave string) tem permissão para no máximo max_requests requisições dentro de qualquer janela móvel de window_seconds segundos. Níveis de Prioridade: Cada requisição tem um nível de prioridade (inteiro 1-5, onde 1 é a prioridade mais alta). Quando o limite de taxa é atingido para um cliente, requisições de prioridade mais baixa (número maior) devem ser rejeitadas primeiro. Especificamente, se uma nova requisição com prioridade P chegar e a janela estiver cheia, o limitador deve verificar se existe alguma requisição na janela atual com prioridade estritamente menor (número maior) que P. Se existir, a requisição de prioridade mais baixa (com o maior número) tem seu slot "revogado" e a nova requisição de prioridade mais alta é admitida. A requisição revogada deve ser registrada para que possa ser reportada. Se não houver requisição de prioridade mais baixa para revogar, a nova requisição é rejeitada. Permissão de Rajada (Burst Allowance): Cada cliente pode opcionalmente ter uma permissão de rajada burst (por padrão 0). Isto permite até burst requisições adicionais além de max_requests em uma janela, mas somente se pelo menos metade da duração da janela tiver passado desde a primeira requisição do cliente na janela atual. Segurança em Threads (Thread Safety): O limitador de taxa deve ser seguro para uso a partir de múltiplas threads concorrentemente. Demonstre isto com um cenário de teste. Estatísticas: O limitador deve rastrear estatísticas por cliente: total de requisições admitidas, total rejeitadas, total revogadas (removidas por requisições de maior prioridade) e utilização atual da janela (como float de 0.0 a 1.0). Implemente a seguinte interface: class RateLimiter: def __init__(self, max_requests: int, window_seconds: float, default_burst: int = 0): ... def set_client_burst(self, client_id: str, burst: int) -> None: """Override burst allowance for a specific client.""" ... def allow(self, client_id: str, priority: int = 3, timestamp: float = None) -> bool: """ Check if a request is allowed. If timestamp is None, use current time. Returns True if the request is admitted, False if rejected. """ ... def get_stats(self, client_id: str) -> dict: """ Return a dict with keys: 'admitted', 'rejected', 'revoked', 'utilization' """ ... def get_revoked_log(self, client_id: str) -> list: """ Return a list of (timestamp, priority) tuples for revoked requests for the given client, in chronological order. """ ... Forneça uma implementação completa e executável juntamente com um script de demonstração que: Cria um limiter com max_requests=5, window_seconds=10.0, default_burst=2 Simula uma sequência de requisições de dois clientes com prioridades e timestamps variados que exercitem todas as funcionalidades (expiração da janela deslizante, revogação por prioridade, ativação da rajada e rejeição) Imprime as estatísticas e logs de revogação para cada cliente ao final Inclui um breve teste multithreaded com pelo menos 4 threads fazendo requisições concorrentes Certifique-se de tratar casos de borda tais como: Validação do valor de prioridade (deve ser 1-5) Requisições chegando exatamente nas fronteiras da janela Múltiplas revogações em sequência Ativação da permissão de rajada precisamente no marco de metade da janela IDs de cliente vazios ou desconhecidos em consultas de estatísticas

611
19 Mar 2026 14:46

Programação

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5.2

Implemente um Cache LRU Concorrente Sem Bloqueio Global

Projete e implemente um cache LRU (Least Recently Used — Menos Recentemente Utilizado) com segurança para threads em Python, que suporte leituras e gravações concorrentes sem usar um bloqueio global para cada operação. Sua implementação deve satisfazer os seguintes requisitos: O cache tem uma capacidade máxima fixa especificada no momento da construção. Ele suporta três operações: get(key): Retorna o valor associado à chave, ou None se a chave não estiver presente. Acessar uma chave deve marcá-la como a mais recentemente usada. put(key, value): Insere ou atualiza o par chave-valor. Se o cache estiver na capacidade máxima e uma nova chave for inserida, a entrada menos recentemente usada deve ser removida. delete(key): Remove a chave do cache, se presente. Retorna True se a chave foi encontrada e removida, False caso contrário. O cache deve ser seguro para uso simultâneo por múltiplas threads. Operações get concorrentes em chaves diferentes não devem bloquear umas às outras. Você deve minimizar a contenção — um único bloqueio grosseiro ao redor de tudo não é aceitável. A política de remoção (eviction) deve ser estritamente LRU: a entrada que foi acessada (via get ou put) menos recentemente deve ser a removida. Trate casos-limite: capacidade de 1, puts concorrentes rápidos que disparem remoções, get/put/delete intercalados na mesma chave por diferentes threads, e capacidade zero ou negativa (levantar ValueError). Forneça sua implementação completa como um único módulo Python. Inclua uma breve explicação da sua estratégia de concorrência e por que ela preserva a correção. Inclua também uma demonstração curta (em um bloco main ou função de teste) que crie múltiplas threads executando operações mistas de get/put/delete e que verifique (assert) que o cache nunca excede sua capacidade e que não ocorre corrupção de dados.

570
19 Mar 2026 11:51

Programação

Google Gemini 2.5 Pro VS Anthropic Claude Sonnet 4.6

Implemente um armazenamento chave-valor versionado com consultas históricas

Escreva um código que implemente um armazenamento chave-valor versionado em memória com suporte a leituras históricas. O armazenamento começa vazio e processa uma sequência de comandos. Cada comando mutante bem-sucedido cria exatamente um novo número de versão global, começando em 1. Comandos somente de leitura não devem criar uma versão. Chaves e valores são strings sensíveis a maiúsculas/minúsculas sem espaços. Versões são inteiros positivos. Comandos: SET key value Cria ou sobrescreve a chave com o valor. DELETE key Remove a chave se ela existir. GET key Retorna o valor atual da chave, ou NULL se a chave não existir. GET_VERSION key version Retorna o valor associado à chave imediatamente após a criação da versão global especificada, ou NULL se a chave não existia nessa versão. Se version for maior que a última versão existente, trate-o como inválido e retorne INVALID_VERSION. HISTORY key Retorna todos os estados históricos da chave em ordem crescente de versões, incluindo deleções, formatados como pares version:value separados por vírgulas. Use NULL para estados deletados ou ausentes após uma mutação. Se a chave nunca foi afetada por qualquer comando mutante, retorne EMPTY. Formato de entrada: A primeira linha contém um inteiro N, o número de comandos. As próximas N linhas contêm cada uma um comando. Formato de saída: Para cada comando GET, GET_VERSION e HISTORY, imprima uma linha com o resultado. Detalhes de comportamento e casos limítrofes: Cada SET sempre cria uma nova versão, mesmo que o valor não tenha mudado. Cada DELETE sempre cria uma nova versão, mesmo se a chave não existir. As versões são globais entre todas as chaves, não por chave. HISTORY de uma chave deve incluir apenas as versões em que essa chave foi diretamente afetada por SET ou DELETE. Se uma chave foi deletada e depois definida novamente, ambos os eventos devem aparecer em HISTORY. Eficiência importa: assuma até 200000 comandos, com muitas consultas históricas. Sua solução deve ler da entrada padrão e escrever na saída padrão. Inclua o programa completo funcionando em um único arquivo. Você pode usar qualquer linguagem de programação mainstream, mas o código deve ser completo e executável como está escrito.

606
18 Mar 2026 22:33

Programação

Google Gemini 2.5 Flash VS OpenAI GPT-5.2

Implemente uma Skip List Concorrente Sem Bloqueios com Consultas por Intervalo

Design e implemente uma estrutura de dados skip list concorrente em uma linguagem de sua escolha (C++, Java, Rust, Go ou Python) que suporte as seguintes operações: insert(key, value) – Insere um par chave-valor. Se a chave já existir, atualize o valor de forma atômica. Retorna true se uma nova chave foi inserida, false se foi atualizada. remove(key) – Remove logicamente o par chave-valor. Retorna true se a chave foi encontrada e removida, false caso contrário. find(key) – Retorna o valor associado à chave, ou indica ausência. range_query(low, high) – Retorna todos os pares chave-valor onde low <= key <= high, como uma lista ordenada por chave. O resultado deve ser um snapshot consistente: não deve incluir chaves que nunca estiveram simultaneamente presentes durante a execução da operação. size() – Retorna o número aproximado de elementos ativos (não deletados). Requisitos e restrições: A skip list deve ser segura para uso concorrente por múltiplas threads realizando qualquer combinação das operações acima simultaneamente, sem um bloqueio global único. Você pode usar bloqueios de granularidade fina, técnicas sem bloqueio (CAS) ou uma combinação. Exclusão preguiçosa é aceitável: nós podem ser marcados logicamente como deletados antes da remoção física. A geração de nível probabilística deve usar uma distribuição geométrica padrão com p=0.5 e nível máximo de 32. Chaves são inteiros de 64 bits; valores são strings. Inclua considerações adequadas sobre segurança de memória. Se usar uma linguagem sem coleta de lixo, explique ou implemente sua estratégia de recuperação (por exemplo, recuperação baseada em épocas, hazard pointers). Entregáveis: Código-fonte completo e compilável/executável com comentários explicando sua estratégia de concorrência. Um teste ou demonstração que lance múltiplas threads realizando inserções, exclusões, buscas e consultas por intervalo concorrentes, e valide a correção (por exemplo, sem atualizações perdidas, sem leituras fantasmas em consultas por intervalo, sem travamentos). Uma seção de análise breve (como comentários ou uma docstring) discutindo: As garantias de linearizabilidade (ou isolamento por snapshot) que sua implementação fornece. A complexidade de tempo esperada de cada operação. Limitações conhecidas ou possíveis problemas ABA e como você os aborda. Sua solução será avaliada com base na correção sob concorrência, clareza do código, robustez da estratégia de concorrência, qualidade do mecanismo de snapshot para consultas por intervalo e completude da análise.

592 1
18 Mar 2026 22:05

Programação

Anthropic Claude Sonnet 4.6 VS OpenAI GPT-5.4

Implemente um resolvedor de dependências em Python

Sua tarefa é criar um resolvedor de dependências para um sistema simples de gerenciamento de pacotes. Escreva uma função Python resolve_dependencies(package_definitions, target_package) que determine a ordem correta de instalação para um dado pacote e suas dependências. O argumento package_definitions é uma lista de strings. Cada string define um pacote e suas dependências diretas no formato: 'PackageName: Dep1, Dep2, ...'. Se um pacote não tiver dependências, o formato é 'PackageName:'. Sua função deve: Analisar as strings de entrada para construir um grafo de dependências. Dado um target_package, encontrar todas as suas dependências (incluindo transitivas). Retornar uma única lista de strings representando a ordem de instalação. Essa lista deve ser ordenada topologicamente (uma dependência deve sempre aparecer antes do pacote que depende dela). O próprio target_package deve ser o último item da lista. A lista não deve conter duplicatas. Detectar dependências circulares. Se um ciclo for encontrado, levante um ValueError com uma mensagem que indique claramente o ciclo (por exemplo, 'Dependência circular detectada envolvendo: A -> B -> A'). Detectar pacotes ausentes. Se um pacote lista uma dependência que não está definida em package_definitions, levante um ValueError com uma mensagem como 'Definição de pacote ausente para: C'.

637
18 Mar 2026 20:21

Mostrando 1 a 20 de 26 resultados

Links relacionados

X f L