Orivel Orivel
Menü öffnen

Neueste Aufgaben und Diskussionen

Durchsuche die neuesten Benchmark-Inhalte für Aufgaben und Diskussionen. Wechsle nach Genre, um gezielt zu vergleichen.

Vergleichsgenres

Modellübersicht

Programmierung

Anthropic Claude Sonnet 5 VS OpenAI GPT-5.6

Webserver-Protokoll-Analysator

Schreiben Sie eine Python-Funktion analyze_logs(log_data), die einen mehrzeiligen String entgegennimmt, der Webserver-Protokolleinträge enthält. Die Funktion soll diese Logs parsen, eine Analyse durchführen und ein Dictionary zurückgeben, das die Ergebnisse zusammenfasst. Jede gültige Logzeile folgt diesem Format: [TIMESTAMP] LEVEL IP_ADDRESS "REQUEST_METHOD /path" RESPONSE_CODE BYTES_SENT Beispiel für eine gültige Zeile: [2023-10-27T10:00:00Z] INFO 192.168.1.1 "GET /index.html" 200 1543 Ihre Funktion sollte: Nur die gültigen Logzeilen parsen und fehlerhafte oder leere Zeilen dabei elegant ignorieren. Die folgenden Metriken berechnen: total_requests: Die Gesamtanzahl der gültigen Logeinträge. error_rate: Der Prozentsatz der Requests mit einem LEVEL von ERROR, gerundet auf zwei Nachkommastellen. top_3_ips: Eine Liste von Tupeln, wobei jedes Tupel eine IP-Adresse und deren Request-Anzahl enthält, für die 3 am häufigsten vorkommenden IPs. Die Liste soll absteigend nach Request-Anzahl sortiert sein. busiest_hour: Die Stunde des Tages (ein Integer von 0 bis 23), die die meisten Requests hatte. Der Zeitstempel liegt im ISO-8601-Format (UTC). Ein Dictionary mit den Schlüsseln total_requests, error_rate, top_3_ips und busiest_hour zurückgeben, das die berechneten Werte enthält. Behandeln Sie die folgenden Randfälle: Wenn der Eingabestring log_data leer ist, geben Sie ein Dictionary mit entsprechend nullgesetzten oder leeren Werten zurück (z. B. total_requests: 0, top_3_ips: []). Wenn es weniger als 3 eindeutige IP-Adressen gibt, sollte die Liste top_3_ips alle eindeutigen IPs enthalten, sortiert nach Anzahl. Wenn es einen Gleichstand für die verkehrsreichste Stunde gibt, ist es akzeptabel, eine beliebige der gleichstehenden Stunden zurückzugeben.

262
25 Jul 2026 01:19

Programmierung

OpenAI GPT-5.6 VS Google Gemini 2.5 Pro

Ratenbegrenzer mit gleitendem Fenster und fairen Mehrmandantenquoten

Implementieren Sie eine wiederverwendbare Rate-Limiter-Bibliothek in einer Sprache Ihrer Wahl (Python, Go, TypeScript, Java oder Rust), die pro Client Anfragenquoten mithilfe eines gleitenden-Fenster-Algorithmus durchsetzt und zusätzlich eine faire Verteilungsrichtlinie über mehrere Mandanten bietet. Funktionale Anforderungen: Bieten Sie eine Klasse oder ein Modul mit einer Methode wie allow(tenant_id, client_id, now_ms), die zurückgibt, ob eine Anfrage erlaubt ist und, falls sie abgelehnt wird, wie viele Millisekunden bis zur nächsten erlaubten Anfrage verbleiben (retry_after_ms). Jeder Client ist auf eine maximale Anzahl von Anfragen innerhalb eines rollenden Zeitfensters beschränkt (zum Beispiel 100 Anfragen pro 60.000 ms). Die Konfiguration muss pro Mandant anpassbar sein. Implementieren Sie ein echtes gleitendes Fenster (gewichtet oder auf Logbasis), nicht ein festes Kalender-Bucket-Fenster, sodass Spitzenlasten über Bucket-Grenzen hinweg korrekt behandelt werden. Fügen Sie eine globale Obergrenze pro Mandant hinzu, sodass alle Clients eines Mandanten zusammen ein mandantenweites Maximum nicht überschreiten können. Wenn der Mandant ausgelastet ist, wird die verbleibende Kapazität fair unter den aktiven Clients verteilt, anstatt von einem Client monopolisiert zu werden. Der Limiter muss unter gleichzeitigen Zugriffen von mehreren Threads oder asynchronen Tasks sicher sein. Der Speicher darf nicht unbegrenzt wachsen: veraltete Client-Zustände müssen im Laufe der Zeit entfernt oder kompaktiert werden. Liefergegenstände: Die vollständige Implementierung mit klarer öffentlicher API und Inline-Dokumentation wichtiger Entscheidungen. Eine kurze Erklärung (in Kommentaren oder einem kurzen Prosatext) des gewählten gleitenden-Fenster-Algorithmus sowie seiner Genauigkeits-/Speicher-Kompromisse. Eine Testsuite, die die unten beschriebenen Kern-Grenzfälle abdeckt. In Code und Tests ausdrücklich zu behandelnde Grenzfälle: Anfragen genau an der Fenstergrenze. Ein Client, der inaktiv wird und nach vollständigem Ablauf des Fensters zurückkehrt. Gleichzeitig eintreffende Anfragen, die auf denselben Client-Zähler rennen. Uhr, die rückwärts läuft, oder doppelte Zeitstempel. Mandantensättigung und faire Neuverteilung unter konkurrierenden Clients. Aussondern veralteter Client-Zustände, ohne aktive Clients zu entfernen. Geben Sie alle Annahmen an, die Sie treffen (Einzelprozess vs. verteilt, Verfügbarkeit einer monotonen Uhr usw.). Wenn Sie einen Einzelprozess annehmen, beschreiben Sie kurz, wie das Design auf eine verteilte Bereitstellung erweitert werden würde.

269
16 Jul 2026 09:49

Programmierung

Anthropic Claude Opus 4.8 VS Google Gemini 2.5 Flash

Implementiere einen deterministischen Limit-Order-Book-Simulator

Schreibe eine Python-3.11-Lösung in einer einzigen Datei, die die Funktion process_events(events: list[dict]) -> dict implementiert. Verwende keine externen Pakete. Die Funktion muss ein kleines Börsen-Limit-Order-Book für ein Instrument simulieren. Sie erhält eine Liste von Ereignis-Dictionaries in Eingabereihenfolge und gibt ein Dictionary mit genau diesen Schlüsseln zurück: trades, rejected, book. Ereignistypen: Neues-Order-Ereignis: Erforderliche Felder: type="new", id, side, order_type, qty. side ist "buy" oder "sell". order_type ist "limit" oder "market". qty ist eine positive ganze Zahl. Eine Limit-Order erfordert außerdem price, eine positive ganze Anzahl von Cent. Das optionale Feld tif ist Time-in-Force: "GTC", "IOC" oder "FOK". Falls es fehlt, verwende "GTC" für Limit-Orders und "IOC" für Market-Orders. Market-Orders dürfen nicht tif="GTC" haben und dürfen nicht im Book verbleiben. Cancel-Ereignis: Erforderliche Felder: type="cancel", id. Es storniert die verbleibende Menge einer derzeit im Book ruhenden Order mit dieser id. Matching-Regeln: Das Book hat bids und asks. Ruhende Buy-Limit-Orders sind bids; ruhende Sell-Limit-Orders sind asks. Preis-Zeit-Priorität ist zwingend: zuerst der beste Preis; bei gleichem Preis zuerst die früher akzeptierte ruhende Order. Eine Buy-Order matched gegen ruhende asks, solange sie kreuzen kann: Eine Market-Buy kreuzt jeden ask; eine Limit-Buy kreuzt asks mit ask-Preis <= Buy-Limit-Preis. Eine Sell-Order matched gegen ruhende bids, solange sie kreuzen kann: Eine Market-Sell kreuzt jeden bid; eine Limit-Sell kreuzt bids mit bid-Preis >= Sell-Limit-Preis. Jede Trade-Menge ist min(verbleibende Menge der eingehenden Order, verbleibende Menge der ruhenden Order). Der Trade-Preis ist immer der Limit-Preis der ruhenden Maker-Order, niemals der Preis der eingehenden Order. Ein Trade-Record muss unmittelbar beim Eintreten angehängt werden und genau diese Schlüssel haben: buy_id, sell_id, price, qty, taker_id, maker_id. Teilweise ausgeführte ruhende Orders behalten ihre ursprüngliche Priorität mit der verbleibenden Menge. Vollständig ausgeführte Orders verlassen das Book. Time-in-Force-Verhalten: GTC-Limit-Orders lassen jeden nicht ausgeführten Rest im Book ruhen. IOC-Orders führen sofort so viel wie möglich aus und stornieren dann jeden Rest. FOK-Orders müssen gemäß dem aktuellen Book und den Kreuzungsregeln sofort vollständig ausführbar sein. Falls sie nicht vollständig ausführbar sind, erzeugen sie keine Trades und verändern das Book nicht. Falls sie vollständig ausführbar sind, werden sie normal ausgeführt. FOK-Orders verbleiben niemals im Book. Validierungs- und Zurückweisungsregeln: Wenn ein Ereignis fehlerhaft formatiert ist, weise es zurück, ohne das Book zu verändern. Hänge einen Zurückweisungs-Record an rejected an mit den Schlüsseln input_index, event, reason. Der Grund kann eine kurze, für Menschen lesbare Zeichenkette sein. Weise eine neue Order zurück, wenn ihre id bereits von einer zuvor akzeptierten neuen Order verwendet wurde, selbst wenn diese frühere Order inzwischen ausgeführt oder storniert wurde. Weise Cancel-Ereignisse für unbekannte ids oder ids zurück, die nicht mehr im Book ruhen. Weise qty- und price-Werte zurück, die nicht ganzzahlig sind, null sind oder negativ sind. In Python darf bool für diese Felder nicht als Ganzzahl akzeptiert werden. Ignoriere zusätzliche Felder bei ansonsten gültigen Ereignissen. Rückgabeformat: trades: Liste von Trade-Records in Ausführungsreihenfolge. rejected: Liste von Zurückweisungs-Records in Eingabereihenfolge. book: ein Dictionary mit den Schlüsseln bids und asks. book["bids"] muss alle ruhenden bids auflisten, sortiert nach absteigendem Preis, dann ursprünglicher Ruhezeit, jeweils als {"id": id, "price": price, "qty": remaining_qty}. book["asks"] muss alle ruhenden asks auflisten, sortiert nach aufsteigendem Preis, dann ursprünglicher Ruhezeit, jeweils als {"id": id, "price": price, "qty": remaining_qty}. Deine Antwort sollte vollständiger ausführbarer Python-Code sein, der process_events definiert. Du darfst Hilfsklassen/-funktionen und einen kleinen Selbsttest-Abschnitt einfügen, geschützt durch if name == "main":, aber die Kernfunktion darf weder von stdin lesen noch nach stdout schreiben.

294
29 Jun 2026 09:44

Programmierung

Anthropic Claude Opus 4.8 VS Google Gemini 2.5 Pro

Atomare JSON-Patch-Anwendung in Python implementieren

Schreiben Sie eine Python-3.11-Implementierung einer Funktion namens apply_json_patch(document, patch), die eine JSON-Patch-ähnliche Sequenz von Operationen auf einen JSON-kompatiblen Wert anwendet und den gepatchten Wert zurückgibt. Das Eingabedokument kann jede Kombination aus dict, list, str, int, float, bool und None sein. Der Patch ist eine Liste von Operations-Dicts. Die Implementierung darf das ursprüngliche Dokument oder irgendein von ihm erreichbares verschachteltes Objekt nicht verändern. Wenn irgendeine Operation ungültig ist, muss die Funktion eine benutzerdefinierte Ausnahme-Klasse namens JsonPatchError auslösen und das ursprüngliche Dokument unverändert lassen. Unterstützte Operationen sind add, remove, replace, move, copy und test. Verwenden Sie JSON Pointer-Pfade mit durch Schrägstriche getrennten Tokens, wobei der leere String das gesamte Dokument identifiziert, Tokens ~1 als / und ~0 als ~ dekodieren und jede andere Verwendung von ~ ungültig ist. Für Objekte ist ein Pfad-Token ein Schlüssel. Für Arrays muss ein Pfad-Token eine nicht-negative ganze Zahl ohne führende Nullen sein, mit Ausnahme des einzelnen Tokens 0; nur für add darf das letzte Token - zum Anhängen sein. Die add-Operation fügt in Arrays an einem Index von 0 bis len(array) ein, hängt für - an, setzt einen Objekt-Schlüssel oder ersetzt das gesamte Dokument, wenn der Pfad leer ist. Die remove-Operation verlangt, dass das Ziel existiert, und löscht es. Die replace-Operation verlangt, dass das Ziel existiert, und ersetzt es. Die move-Operation verlangt from und path, entfernt den Wert bei from und fügt ihn bei path hinzu, und muss das Verschieben eines Wertes in einen seiner eigenen Nachkommen ablehnen. Die copy-Operation verlangt from und path und kopiert den Quellwert tief nach Ziel. Die test-Operation verlangt value und ist nur erfolgreich, wenn das aktuelle Ziel tiefengleich zu value ist, einschließlich normaler Python-Gleichheit für Zahlen und exakter Gleichheit für Strings, Booleans und None. Jedes Operations-Dict muss genau die für diese Operation erforderlichen Felder plus das Feld op enthalten; unbekannte Felder oder fehlende Felder sind Fehler. Die Funktion sollte deterministisch, angemessen effizient und nur von der Python-Standardbibliothek abhängig sein. Fügen Sie alle notwendigen Hilfsfunktionen oder -klassen hinzu. Schreiben Sie kein Kommandozeilenprogramm und verwenden Sie keine externen Pakete.

343
15 Jun 2026 09:43

Programmierung

Anthropic Claude Fable 5 VS OpenAI GPT-5.5

Implementieren Sie einen auf Abhängigkeiten basierenden Aufgabenplaner in Python

Schreiben Sie eine Python-Funktion oder -Klasse, die eine Liste von Aufgaben basierend auf ihren Abhängigkeiten plant. Der Scheduler soll die Reihenfolge bestimmen, in der Aufgaben ausgeführt werden können, und Aufgaben gruppieren, die parallel ausgeführt werden können. Die Eingabe ist eine Liste von Dictionaries, wobei jedes Dictionary eine Aufgabe mit den folgenden Schlüsseln repräsentiert: id: Eine eindeutige Zeichenfolgenkennung für die Aufgabe. name: Ein String-Name für die Aufgabe. dependencies: Eine Liste von String-IDs von Aufgaben, die abgeschlossen sein müssen, bevor diese Aufgabe starten kann. Ihre Implementierung sollte: Die Liste der Aufgaben-Dictionaries als Eingabe entgegennehmen. Einen gültigen Ausführungsplan als Liste von Listen zurückgeben. Jede innere Liste stellt einen 'Batch' von Aufgaben dar, die gleichzeitig ausgeführt werden können. Die Reihenfolge der Batches repräsentiert die sequentielle Ausführungsreihenfolge. Die Reihenfolge der Aufgaben-IDs innerhalb eines Batches spielt keine Rolle. Zirkuläre Abhängigkeiten erkennen und behandeln. Wenn ein Zyklus gefunden wird, sollte ein ValueError mit einer beschreibenden Nachricht ausgelöst werden. Fälle erkennen und behandeln, in denen eine Abhängigkeits-ID keiner vorhandenen Aufgabe entspricht. Dies sollte ebenfalls einen ValueError auslösen.

357
12 Jun 2026 09:39

Programmierung

OpenAI GPT-5.5 VS Google Gemini 2.5 Flash

Ratenbegrenzer mit gleitendem Fenster und Burst-Zulassung

Entwerfen und implementieren Sie einen threadsicheren Ratenbegrenzer in einer Sprache Ihrer Wahl (Python, Go, Java, TypeScript oder Rust), der die folgenden Anforderungen unterstützt: API-Oberfläche: Stellen Sie mindestens diese Operationen bereit: allow(client_id: str, cost: int = 1) -> bool — gibt zurück, ob die Anfrage gerade jetzt erlaubt ist. retry_after(client_id: str) -> float — gibt Sekunden zurück, bis mindestens 1 Einheit Kapazität verfügbar ist (0, wenn aktuell erlaubt). Ein Konstruktor, der eine pro-Client-Konfiguration akzeptiert: rate (Einheiten pro Sekunde), burst (maximale gespeicherte Einheiten) und ein optionales window_seconds für die Gleitfenster-Abrechnung. Algorithmus: Implementieren Sie eine Hybridlösung, die einen Token Bucket (für Burst-Toleranz) mit einem Gleitfenster-Log oder -Zähler kombiniert (um die Gesamtzahl der innerhalb von window_seconds erlaubten Anfragen zu begrenzen und so anhaltenden Missbrauch zu verhindern, den ein reiner Token Bucket nach Auffüllungen erlauben würde). Eine Anfrage ist nur dann erlaubt, wenn beide Prüfungen bestehen. Begründen Sie Ihre Wahl der Datenstruktur für das Gleitfenster (exakter Log vs. gewichtete Zwei-Bucket-Approximation) und diskutieren Sie Speichergenauigkeits-Abwägungen in einem kurzen Kommentarfeld oder einer Begleitnotiz. Nebenläufigkeit: Der Limiter wird von vielen Threads/Goroutines gleichzeitig für dieselben und verschiedene client_ids getroffen. Vermeiden Sie, dass ein einzelner globaler Lock zum Flaschenhals wird (z. B. per-Client-Locks oder Lock-Striping). Dokumentieren Sie, warum Ihr Ansatz unter konkurrierenden allow-Aufrufen korrekt ist (kein Doppelverbrauch von Tokens, keine verlorenen Updates). Zeitquelle: Machen Sie die Uhr injizierbar, damit Tests deterministisch sind. Verwenden Sie standardmäßig eine monotonische Uhr. Randfälle, die explizit behandelt werden müssen: cost größer als burst (muss abgelehnt werden, darf niemals ewig blockieren). Uhr geht rückwärts oder große Pausen (z. B. angehaltene VM): clampen statt abstürzen, und keine unbegrenzten Tokens gewähren. Erste Anfrage für einen neuen Client (Lazy-Initialisierung). Aufräumen veralteter Clients (Speicher darf nicht unbegrenzt wachsen, wenn Clients aufhören zu rufen). Bruchteilige Tokens / sub-millisekunden Timing. Tests: Stellen Sie mindestens 6 Unit-Tests mit der injizierbaren Uhr bereit, die abdecken: grundlegendes Allow/Deny, Burst-Entleerung und Auffüllung, gleitende Fenster-Grenze unabhängig von Bucket-Auffüllung, cost > burst, gleichzeitige Kontention auf einem Client (deterministische Eigenschaft: insgesamt erlaubte Anfragen in T Sekunden ≤ rate*T + burst), und Eviktion veralteter Clients. Komplexität: Geben Sie die amortisierte Zeitkomplexität von allow und die Speicherkomplexität pro Client an. Liefern Sie: vollständigen ausführbaren Code (eine einzelne Datei ist in Ordnung, Sie können Dateien aufteilen, wenn Sie sie deutlich kennzeichnen), die Tests und eine kurze Designnotiz (max. ~250 Wörter), die Ihre Entscheidungen und die präzisen Semantiken erklärt, wenn die beiden Algorithmen uneinig sind.

467
12 May 2026 09:45

Programmierung

Anthropic Claude Opus 4.7 VS OpenAI GPT-5.4

Markdown-Subset-zu-HTML-Konverter

Schreiben Sie eine Python-Funktion markdown_to_html(markdown_text: str) -> str, die einen String, der eine bestimmte Teilmenge von Markdown enthält, in die entsprechende HTML-Darstellung konvertiert. Die Funktion muss die folgenden Merkmale unterstützen: Block-Elemente: Kopfzeilen: Zeilen, die mit # bis ###### beginnen, sollten in <h1>- bis <h6>-Tags umgewandelt werden. Ungeordnete Listen: Zeilen, die mit - beginnen, sollten in <ul>- und <li>-Tags umgewandelt werden. Verschachtelte Listen, eingerückt durch zwei Leerzeichen pro Ebene, müssen unterstützt werden. Eine Liste endet durch eine Leerzeile oder ein anderes Block-Element. Codeblöcke: Inhalt, der zwischen Zeilen mit dreifachen Backticks () eingeschlossen ist, sollte in `<pre><code>...</code></pre>` umgewandelt werden. Der Sprachbezeichner in den öffnenden Backticks (z. B. python) sollte ignoriert werden. Innerhalb eines Codeblocks darf keine weitere Markdown-Verarbeitung stattfinden. Absätze: Jeder andere Text sollte in <p>-Tags eingeschlossen werden. Aufeinanderfolgende Textzeilen gehören zum gleichen Absatz. Absätze werden durch eine oder mehrere Leerzeilen getrennt. Inline-Elemente: Fett & Kursiv: ***text*** sollte in <strong><em>text</em></strong> umgewandelt werden. Fett: **text** sollte in <strong>text</strong> umgewandelt werden. Kursiv: *text* sollte in <em>text</em> umgewandelt werden. Regeln und Einschränkungen: Inline-Elemente können innerhalb von Kopfzeilen und Listenelementen verschachtelt sein. Der Parser sollte robust gegenüber fehlerhaften oder kniffligen Eingaben sein, wie z. B. nicht geschlossenen Inline-Tags. Zum Beispiel sollte *italic als <p>*italic</p> gerendert werden. Die Prioritätsreihenfolge für Inline-Elemente ist ***, dann **, dann *. Gehen Sie davon aus, dass die Eingabe ein einzelner mehrzeiliger String ist. Implementieren Sie keine Unterstützung für andere Markdown-Funktionen wie Links, Bilder, Blockzitate oder geordnete Listen. Das ausgegebene HTML muss kein vollständiges Dokument sein (keine <html>- oder <body>-Tags erforderlich). Beispiel-Eingabe: # 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

Programmierung

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.4

Kommandozeilen-Tool zur Dateisynchronisation

Schreiben Sie ein Python-Skript für ein Kommandozeilen-Tool zur Dateisynchronisation. Das Skript muss drei Kommandozeilenargumente akzeptieren: source_path: Der Pfad zum Quellverzeichnis. replica_path: Der Pfad zum Replikatverzeichnis, das synchronisiert werden soll. log_file_path: Der Pfad zu einer Datei, in die alle Operationen protokolliert werden. Kernfunktionalität: Einweg-Synchronisation: Das Tool muss eine Einweg-Synchronisation durchführen, sodass das Verzeichnis replica_path eine exakte Kopie des Verzeichnisses source_path wird. Dateien und Verzeichnisse, die im Source vorhanden, aber im Replica nicht vorhanden sind, müssen in das Replica kopiert werden. Dateien und Verzeichnisse, die im Replica vorhanden, aber im Source nicht vorhanden sind, müssen aus dem Replica entfernt werden. Dateien, die an beiden Orten vorhanden sind, deren Inhalt sich jedoch unterscheidet, müssen im Replica aktualisiert werden (die Version im Source überschreibt die Version im Replica). Änderungserkennung: Verwenden Sie den MD5-Hash des Datei-Inhalts, um zu bestimmen, ob eine Datei aktualisiert werden muss. Verlassen Sie sich nicht auf Änderungszeitstempel. Protokollierung: Protokollieren Sie alle Dateioperationen (z. B. "KOPIEREN file.txt", "ENTFERNEN old_dir", "AKTUALISIEREN changed.log") sowohl in der Konsole als auch in der angegebenen Protokolldatei. Jeder Protokolleintrag sollte mit einem Zeitstempel versehen sein. Ausführung: Das Skript soll die Synchronisationsoperation genau einmal ausführen und dann beenden. Es darf nicht in einer Schleife laufen. Anforderungen: Verwenden Sie Python 3. Verwenden Sie die Bibliothek argparse für die Kommandozeilenargumentauswertung. Die Lösung muss verschachtelte Verzeichnisse, leere Verzeichnisse und Dateien verschiedener Größen korrekt behandeln. Das Skript sollte eine einzelne, eigenständige Datei sein.

573
09 Apr 2026 09:38

Programmierung

Google Gemini 2.5 Flash VS OpenAI GPT-5.4

Implementiere einen sperrfreien konkurrierenden LRU-Cache

Implementiere einen threadsicheren LRU (Least Recently Used) Cache in Python, der gleichzeitig Lese- und Schreibzugriffe unterstützt, ohne für jede Operation einen globalen Lock zu verwenden. Deine Implementierung muss die folgenden Anforderungen erfüllen: Schnittstelle: Der Cache muss diese Operationen unterstützen: __init__(self, capacity: int) — Initialisiere den Cache mit einer gegebenen maximalen Kapazität (positive ganze Zahl). get(self, key: str) -> Optional[Any] — Gib den mit dem Schlüssel assoziierten Wert zurück, falls er existiert (und markiere ihn als kürzlich benutzt), oder gib None zurück, wenn der Schlüssel nicht im Cache ist. put(self, key: str, value: Any) -> None — Füge das Schlüssel-Wert-Paar ein oder aktualisiere es. Falls der Cache nach der Einfügung die Kapazität überschreitet, entferne das am wenigsten kürzlich verwendete Element. delete(self, key: str) -> bool — Entferne den Schlüssel aus dem Cache. Gib True zurück, wenn der Schlüssel vorhanden war, sonst False. keys(self) -> List[str] — Gib eine Liste aller Schlüssel zurück, die sich derzeit im Cache befinden, geordnet von am kürzesten zuletzt verwendet (most recently used) bis am längsten nicht verwendet (least recently used). Nebenläufigkeit: Der Cache muss sicher von mehreren Threads gleichzeitig verwendet werden können. Ziel ist ein Design, das gleichzeitige Lesezugriffe ermöglicht, ohne dass sie sich gegenseitig blockieren, wenn möglich (z. B. durch Leser-Schreiber-Sperren, feinkörnige Sperren oder sperrfreie Techniken). Ein einzelner globaler Mutex, der jede Operation serialisiert, gilt als Ausgangsbasis, ist aber suboptimal. Korrektheit unter contention: Bei gleichzeitigen Zugriffen darf der Cache niemals veraltete oder korruptierte Daten zurückgeben, darf niemals seine angegebene Kapazität überschreiten und muss eine konsistente LRU-Reihenfolge beibehalten. Randfälle, die behandelt werden müssen: Kapazität von 1 put mit einem Schlüssel, der bereits existiert (sollte den Wert aktualisieren und an die Position „am kürzesten zuletzt verwendet“ verschieben) delete eines Schlüssels, der nicht existiert gleichzeitige put- und get-Operationen auf demselben Schlüssel schnelle aufeinanderfolgende Evictions, wenn viele Threads gleichzeitig einfügen Tests: Füge eine Testfunktion run_tests() hinzu, die die Korrektheit aller Operationen sowohl in Single-Thread- als auch in Multi-Thread-Szenarien demonstriert. Der Multi-Thread-Test sollte mindestens 8 Threads verwenden, die eine Mischung aus get, put und delete-Operationen auf überlappenden Schlüsseln ausführen, und sicherstellen (per Assertions), dass der Cache niemals die Kapazität überschreitet und dass get niemals einen Wert für einen Schlüssel zurückgibt, der nie eingefügt wurde. Gib deine vollständige Implementierung in Python an. Verwende nur die Standardbibliothek (keine Drittanbieter-Pakete). Füge Docstrings und Kommentare hinzu, die deine Nebenläufigkeitsstrategie und etwaige Design-Trade-offs erklären.

594
23 Mar 2026 17:47

Programmierung

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.2

Erweiterter Logdatei-Parser für ein benutzerdefiniertes Format

Schreiben Sie eine Python-Funktion parse_log(log_content: str) -> list, die eine Logdatei mit einem benutzerdefinierten Format parst. Die Funktion soll den Loginhalt als einen einzigen mehrzeiligen String entgegennehmen und eine Liste von Dictionaries zurückgeben, wobei jedes Dictionary eine erfolgreich abgeschlossene Transaktion darstellt. Regeln für das Log-Format: START <transaction_id> <timestamp>: Markiert den Beginn einer Transaktion. transaction_id ist ein String ohne Leerzeichen. timestamp ist ein ISO-8601-formatiertes String. END <transaction_id> <status> <timestamp>: Markiert das Ende einer Transaktion. Die transaction_id muss mit einer offenen Transaktion übereinstimmen. status ist ein einzelnes Wort (z. B. SUCCESS, FAIL). EVENT <key1>=<value1> <key2>="<value with spaces>" ...: Stellt ein Ereignis innerhalb der aktuell aktiven Transaktion dar. Es besteht aus einem oder mehreren Schlüssel-Wert-Paaren. Werte, die Leerzeichen enthalten, müssen in doppelte Anführungszeichen eingeschlossen sein. COMMENT # <any text>: Eine Kommentarzeile, die ignoriert werden soll. Verarbeitungslogik: Die Funktion soll Zeilen nacheinander verarbeiten. Eine EVENT-Zeile gehört zur zuletzt gestarteten Transaktion, die noch nicht beendet wurde. Eine Transaktion gilt nur dann als abgeschlossen und gültig, wenn sie eine passende START- und END-Zeile mit derselben transaction_id hat. Die Ausgabe soll eine Liste von Dictionaries sein. Jedes Dictionary repräsentiert eine abgeschlossene Transaktion und muss folgende Schlüssel haben: transaction_id (string) start_time (string) end_time (string) status (string) events (eine Liste von Dictionaries, wobei jedes innere Dictionary die Schlüssel-Wert-Paare einer EVENT-Zeile repräsentiert). Fehlerbehandlung und Randfälle: Ignorieren Sie alle COMMENT-Zeilen, Leerzeilen oder Zeilen, die fehlerhaft sind und nicht den angegebenen Formaten entsprechen. Ignorieren Sie jedes EVENT, das außerhalb einer aktiven Transaktion auftritt (d. h. vor dem ersten START oder nachdem eine Transaktion geschlossen wurde). Wenn eine neue START-Zeile erscheint, bevor die vorherige Transaktion mit einem END geschlossen wurde, gilt die vorherige Transaktion als "abandoned" (verlassen) und sollte verworfen werden. Die neue START-Zeile beginnt eine neue Transaktion. Jede Transaktion, die am Ende der Logdatei noch offen ist, gilt ebenfalls als "abandoned" und sollte nicht in die endgültige Ausgabe aufgenommen werden.

572
23 Mar 2026 08:42

Programmierung

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

Einen nebenläufigen Rate Limiter mit gleitendem Fenster und Prioritätswarteschlangen implementieren

Designen und implementieren Sie einen thread-sicheren Rate Limiter in Python, der die folgenden Funktionen unterstützt: Sliding Window Rate Limiting: Der Limiter sollte einen Sliding-Window-Algorithmus (keine festen Fenster) verwenden, um Anfragezahlen zu verfolgen. Bei einem Maximum von max_requests, das innerhalb eines Zeitraums von window_seconds erlaubt ist, muss er zu jedem beliebigen Zeitpunkt korrekt bestimmen können, ob eine neue Anfrage erlaubt ist. Multiple Tiers: Der Rate Limiter muss mehrere benannte Tiers unterstützen (z. B. "free", "standard", "premium"), jeweils mit eigener Konfiguration für max_requests und window_seconds. Clients werden bei der Registrierung einem Tier zugewiesen. Priority Queue for Deferred Requests: Wenn eine Anfrage gedrosselt wird, sollte der Limiter sie nicht einfach ablehnen, sondern in eine pro-Tier-Prioritätswarteschlange einreihen. Jede Anfrage hat eine Ganzzahl-Priorität (kleinere Zahl = höhere Priorität). Der Limiter sollte eine Methode bereitstellen, die, wenn Kapazität frei wird, die wartende Anfrage mit der höchsten Priorität für einen gegebenen Client aus der Warteschlange entnimmt und verarbeitet. Thread Safety: Alle Operationen (allow_request, enqueue, dequeue, register_client) müssen sicher sein, von mehreren Threads gleichzeitig aufgerufen zu werden. Cleanup: Stellen Sie eine Methode bereit, um abgelaufene Tracking-Daten für Clients zu entfernen, die in den letzten cleanup_threshold_seconds (konfigurierbar) keine Anfragen gestellt haben. Ihre Implementierung sollte Folgendes enthalten: Eine RateLimiter-Klasse mit der beschriebenen Schnittstelle. Eine Request-Dataclass oder ein named tuple, das mindestens enthält: client_id, timestamp, priority und payload. Korrekte Behandlung von Randfällen: doppelte Client-Registrierung, Anfragen für nicht registrierte Clients, leere Prioritätswarteschlangen, gleichzeitige Änderungen und Probleme mit der Genauigkeit der Uhr. Schreiben Sie außerdem ein Demonstrationsskript (im Block if __name__ == "__main__"), das: Einen Rate Limiter mit mindestens zwei Tiers erstellt. Mehrere Clients registriert. Einen Burst von Anfragen aus mehreren Threads simuliert, wobei einige zugelassen und andere in die Warteschlange gestellt werden. Zeigt, wie aufgeschobene Anfragen verarbeitet werden, wenn Kapazität frei wird. Eine klare Ausgabe druckt, die die Abfolge der Ereignisse deutlich darstellt. Erläutern Sie Ihre Designentscheidungen in Kommentaren, insbesondere bezüglich Ihrer Implementierung des Sliding Window, Ihrer Wahl der Synchronisationsprimitiven und etwaiger Abwägungen, die Sie zwischen Genauigkeit und Leistung getroffen haben.

616
21 Mar 2026 08:40

Programmierung

Google Gemini 2.5 Pro VS OpenAI GPT-5.2

Implementieren Sie einen nebenläufigen Ratenbegrenzer mit gleitendem Fenster und Prioritätswarteschlangen

Entwerfen und implementieren Sie einen Thread-sicheren Ratenbegrenzer in Python, der folgende Funktionen unterstützt: Gleitende Fenster-Ratenbegrenzung: Anstatt feste Zeitfenster zu verwenden, implementieren Sie einen echten gleitenden Fenster-Algorithmus. Jeder Client (identifiziert durch einen String-Schlüssel) darf höchstens max_requests Anfragen innerhalb eines beliebigen rollenden Fensters von window_seconds Sekunden stellen. Prioritätsstufen: Jede Anfrage hat eine Prioritätsstufe (Ganzzahl 1-5, wobei 1 die höchste Priorität ist). Wenn das Ratenlimit für einen Client erreicht ist, sollten Anfragen mit niedrigerer Priorität (größere Zahl) zuerst abgelehnt werden. Konkret: Wenn eine neue Anfrage mit Priorität P eintrifft und das Fenster voll ist, sollte der Limiter prüfen, ob irgendeine Anfrage im aktuellen Fenster eine streng niedrigere Priorität (größere Zahl) als P hat. Falls ja, wird der Platz der niedrigstpriorisierten (höchstnummerierten) Anfrage "widerrufen" und die neue, höher priorisierte Anfrage zugelassen. Die widerrufene Anfrage sollte protokolliert werden, damit sie gemeldet werden kann. Existiert keine niedrigere Priorität zum Widerruf, wird die neue Anfrage abgelehnt. Burst-Zulage: Jeder Client kann optional eine Burst-Zulage burst haben (Standard 0). Diese erlaubt bis zu burst zusätzliche Anfragen über max_requests hinaus in einem Fenster, aber nur, wenn seit der ersten Anfrage des Clients im aktuellen Fenster mindestens die Hälfte der Fensterdauer vergangen ist. Thread-Sicherheit: Der Ratenbegrenzer muss sicher aus mehreren Threads gleichzeitig verwendbar sein. Demonstrieren Sie dies mit einem Testszenario. Statistiken: Der Limiter muss pro Client Statistiken führen: insgesamt zugelassene Anfragen, insgesamt abgelehnte Anfragen, insgesamt widerrufene Anfragen (durch Anfragen mit höherer Priorität verdrängt) und die aktuelle Fensterauslastung (als Float 0.0 bis 1.0). Implementieren Sie die folgende Schnittstelle: 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: """Überschreibe die Burst-Zulage für einen bestimmten Client.""" ... def allow(self, client_id: str, priority: int = 3, timestamp: float = None) -> bool: """ Prüft, ob eine Anfrage zugelassen wird. Falls timestamp None ist, verwende die aktuelle Zeit. Gibt True zurück, wenn die Anfrage zugelassen wird, False wenn sie abgelehnt wird. """ ... def get_stats(self, client_id: str) -> dict: """ Gibt ein dict mit den Schlüsseln zurück: 'admitted', 'rejected', 'revoked', 'utilization' """ ... def get_revoked_log(self, client_id: str) -> list: """ Gibt eine Liste von (timestamp, priority)-Tupeln für widerrufene Anfragen für den gegebenen Client in chronologischer Reihenfolge zurück. """ ... Liefern Sie eine vollständige, ausführbare Implementierung zusammen mit einem Demonstrationsskript, das: Einen Limiter mit max_requests=5, window_seconds=10.0, default_burst=2 erstellt Eine Sequenz von Anfragen von zwei Clients mit variierenden Prioritäten und Zeitstempeln simuliert, die alle Funktionen abdeckt (Ablauf im gleitenden Fenster, Prioritäts-Widerruf, Burst-Aktivierung und Ablehnung) Am Ende die Statistiken und die Widerrufsprotokolle für jeden Client ausgibt Einen kurzen Multithread-Test enthält mit mindestens 4 Threads, die gleichzeitig Anfragen stellen Stellen Sie sicher, dass Randfälle behandelt werden wie: Validierung der Prioritätswerte (muss 1-5 sein) Anfragen, die genau an den Fenstergrenzen ankommen Mehrfache Widerrufe in Folge Burst-Zulage, die präzise beim Halbfenstermark aktiviert Leere oder unbekannte Client-IDs in Statistikabfragen

617
19 Mar 2026 14:46

Programmierung

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5.2

Implementieren Sie einen sperrfreien nebenläufigen LRU-Cache

Designen und implementieren Sie einen threadsicheren LRU- (Least Recently Used) Cache in Python, der gleichzeitige Lese- und Schreibzugriffe unterstützt, ohne für jede Operation ein globales Lock zu verwenden. Ihre Implementierung muss die folgenden Anforderungen erfüllen: Der Cache hat eine feste maximale Kapazität, die zur Erstellungszeit angegeben wird. Er unterstützt drei Operationen: get(key): Gibt den mit dem Schlüssel assoziierten Wert zurück oder None, wenn der Schlüssel nicht vorhanden ist. Der Zugriff auf einen Schlüssel muss ihn als zuletzt verwendet markieren. put(key, value): Fügt das Schlüssel-Wert-Paar ein oder aktualisiert es. Wenn der Cache voll ist und ein neuer Schlüssel eingefügt wird, muss der am wenigsten kürzlich verwendete Eintrag entfernt werden. delete(key): Entfernt den Schlüssel aus dem Cache, falls vorhanden. Gibt True zurück, wenn der Schlüssel gefunden und entfernt wurde, andernfalls False. Der Cache muss sicher von mehreren Threads gleichzeitig verwendbar sein. Gleichzeitige get-Operationen auf verschiedenen Schlüsseln sollten sich gegenseitig nicht blockieren. Sie sollten die Kontention minimieren — ein einzelnes grobgranulares Lock um alles herum ist nicht akzeptabel. Die Eviktionsstrategie muss strikt LRU sein: Der Eintrag, der am wenigsten kürzlich (durch get oder put) benutzt wurde, muss evakuiert werden. Behandeln Sie Randfälle: Kapazität von 1, schnelle gleichzeitige puts, die Eviktionen auslösen, sich überlappende get/put/delete-Operationen auf demselben Schlüssel aus verschiedenen Threads, und null- oder negative Kapazität (raise ValueError). Stellen Sie Ihre vollständige Implementierung als ein einzelnes Python-Modul bereit. Fügen Sie eine kurze Erklärung Ihrer nebenläufigen Strategie und warum sie die Korrektheit wahrt bei. Fügen Sie außerdem eine kurze Demonstration (in einem main-Block oder einer Testfunktion) hinzu, die mehrere Threads erzeugt, die gemischte get/put/delete-Operationen ausführen, und die versichert, dass der Cache niemals seine Kapazität überschreitet und keine Datenkorruption auftritt.

578
19 Mar 2026 11:51

Programmierung

Google Gemini 2.5 Pro VS Anthropic Claude Sonnet 4.6

Implementieren Sie einen versionierten Schlüssel-Wert-Speicher mit historischen Abfragen

Schreiben Sie Code, der einen im Speicher arbeitenden versionierten Schlüssel-Wert-Speicher implementiert, der historische Lesezugriffe unterstützt. Der Speicher beginnt leer und verarbeitet eine Sequenz von Befehlen. Jeder erfolgreiche mutierende Befehl erzeugt genau eine neue globale Versionsnummer, beginnend bei 1. Nur schreibfreie Befehle dürfen keine Version erzeugen. Schlüssel und Werte sind case-sensitve Strings ohne Leerzeichen. Versionen sind positive ganze Zahlen. Commands: SET key value Create or overwrite key with value. DELETE key Remove key if it exists. GET key Return the current value for key, or NULL if the key does not exist. GET_VERSION key version Return the value associated with key immediately after the specified global version was created, or NULL if the key did not exist at that version. If version is greater than the latest existing version, treat it as invalid and return INVALID_VERSION. HISTORY key Return all historical states for the key in increasing version order, including deletions, formatted as version:value pairs separated by commas. Use NULL for deleted or absent-after-mutation states. If the key has never been affected by any mutating command, return EMPTY. Input format: The first line contains an integer N, the number of commands. The next N lines each contain one command. Output format: For every GET, GET_VERSION, and HISTORY command, print one line with the result. Behavior details and edge cases: Every SET always creates a new version, even if the value is unchanged. Every DELETE always creates a new version, even if the key does not exist. Versions are global across all keys, not per key. HISTORY for a key should include only versions where that key was directly affected by SET or DELETE. If a key was deleted and later set again, both events must appear in HISTORY. Efficiency matters: assume up to 200000 commands, with many historical queries. Your solution should read from standard input and write to standard output. Include the full working program in one file. You may use any mainstream programming language, but the code should be complete and executable as written.

613
18 Mar 2026 22:33

Programmierung

Google Gemini 2.5 Flash VS OpenAI GPT-5.2

Implementieren Sie eine sperrfreie konkurrierende Skip-Liste mit Bereichsabfragen

Entwerfen und implementieren Sie eine nebenläufige Skip-Liste in einer von Ihnen gewählten Sprache (C++, Java, Rust, Go oder Python), die die folgenden Operationen unterstützt: insert(key, value) – Fügen Sie ein Schlüssel-Wert-Paar ein. Falls der Schlüssel bereits existiert, aktualisieren Sie den Wert atomar. Gibt true zurück, wenn ein neuer Schlüssel eingefügt wurde, false, wenn aktualisiert wurde. remove(key) – Löschen Sie das Schlüssel-Wert-Paar logisch. Gibt true zurück, wenn der Schlüssel gefunden und entfernt wurde, sonst false. find(key) – Geben Sie den dem Schlüssel zugeordneten Wert zurück oder zeigen Sie das Fehlen an. range_query(low, high) – Geben Sie alle Schlüssel-Wert-Paare zurück, für die low <= key <= high gilt, als Liste nach Schlüssel sortiert. Das Ergebnis muss ein konsistenter Snapshot sein: Es darf keine Schlüssel enthalten, die niemals gleichzeitig während der Ausführung der Operation vorhanden waren. size() – Geben Sie die ungefähre Anzahl aktiver (nicht gelöschter) Elemente zurück. Anforderungen und Einschränkungen: Die Skip-Liste muss sicher für die gleichzeitige Verwendung durch mehrere Threads sein, die beliebige Kombinationen der oben genannten Operationen gleichzeitig ausführen, ohne ein einzelnes globales Lock. Sie können feinmaschige Sperren, sperrfreie Techniken (CAS) oder eine Kombination verwenden. Lazy Deletion ist akzeptabel: Knoten können vor der physischen Entfernung logisch als gelöscht markiert werden. Die probabilistische Level-Generierung sollte eine Standard-Geometrische Verteilung mit p=0.5 und einem maximalen Level von 32 verwenden. Schlüssel sind 64-Bit-Ganzzahlen; Werte sind Strings. Berücksichtigen Sie die korrekte Speicherverwaltung. Wenn Sie eine Sprache ohne Garbage Collection verwenden, erklären oder implementieren Sie Ihre Reclamationsstrategie (z. B. epoch-based reclamation, hazard pointers). Abgaben: Vollständiger, kompilierbarer/ausführbarer Quellcode mit Kommentaren, die Ihre Nebenläufigkeitsstrategie erklären. Ein Test oder eine Demonstration, die mehrere Threads startet, die gleichzeitig Inserts, Deletes, Finds und Range Queries ausführen, und die die Korrektheit validiert (z. B. keine verlorenen Updates, keine Phantom-Leses in Bereichsabfragen, keine Abstürze). Ein kurzer Analyseabschnitt (als Kommentare oder Docstring), der Folgendes diskutiert: Die Linearizability- (oder Snapshot-Isolation-)Garantien, die Ihre Implementierung bietet. Die erwartete Zeitkomplexität jeder Operation. Bekannte Einschränkungen oder mögliche ABA-Probleme und wie Sie diese adressieren. Ihre Lösung wird hinsichtlich Korrektheit unter Nebenläufigkeit, Codeklarheit, Robustheit der Nebenläufigkeitsstrategie, Qualität des Snapshot-Mechanismus für Bereichsabfragen und Gründlichkeit der Analyse bewertet.

600 1
18 Mar 2026 22:05

Programmierung

Anthropic Claude Sonnet 4.6 VS OpenAI GPT-5.4

Implementiere einen Abhängigkeitsauflöser in Python

Du sollst einen Dependency Resolver für ein einfaches Paketverwaltungssystem erstellen. Schreibe eine Python-Funktion resolve_dependencies(package_definitions, target_package), die die korrekte Installationsreihenfolge für ein gegebenes Paket und seine Abhängigkeiten bestimmt. Das Argument package_definitions ist eine Liste von Strings. Jeder String definiert ein Paket und seine direkten Abhängigkeiten im Format: 'PackageName: Dep1, Dep2, ...'. Wenn ein Paket keine Abhängigkeiten hat, lautet das Format 'PackageName:'. Deine Funktion sollte: Die Eingabestrings parsen, um einen Abhängigkeitsgraphen zu erstellen. Für ein gegebenes target_package alle seine Abhängigkeiten (einschließlich transitiver Abhängigkeiten) ermitteln. Eine einzelne Liste von Strings zurückgeben, die die Installationsreihenfolge repräsentiert. Diese Liste muss topologisch sortiert sein (eine Abhängigkeit muss immer vor dem Paket erscheinen, das von ihr abhängt). Das target_package selbst sollte das letzte Element in der Liste sein. Die Liste darf keine Duplikate enthalten. Zyklische Abhängigkeiten erkennen. Wird ein Zyklus gefunden, soll eine ValueError ausgelöst werden mit einer Nachricht, die den Zyklus klar angibt (z. B. 'Zyklische Abhängigkeit festgestellt, beteiligt: A -> B -> A'). Fehlende Pakete erkennen. Wenn ein Paket eine Abhängigkeit auflistet, die in package_definitions nicht definiert ist, soll eine ValueError ausgelöst werden mit einer Nachricht wie 'Fehlende Paketdefinition für: C'.

644
18 Mar 2026 20:21

1 bis 20 von 26 Ergebnissen

Verwandte Links

X f L