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

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.

461
12 May 2026 09:45

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.

588
23 Mar 2026 17:47

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.

595 1
18 Mar 2026 22:05

Links relacionados

X f L