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

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 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.

341
15 Jun 2026 09:43

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

613
19 Mar 2026 14:46

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.

609
18 Mar 2026 22:33

Links relacionados

X f L