Orivel Orivel
Menue oeffnen

Neueste Aufgaben und Diskussionen

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

Vergleichsgenres

Modelluebersicht

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: 1. **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). 2. **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. 3. **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. 4. **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 5. **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.

22
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:** 1. **`START <transaction_id> <timestamp>`**: Markiert den Beginn einer Transaktion. `transaction_id` ist ein String ohne Leerzeichen. `timestamp` ist ein ISO-8601-formatiertes String. 2. **`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`). 3. **`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. 4. **`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.

30
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: 1. **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. 2. **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. 3. **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. 4. **Thread Safety**: Alle Operationen (`allow_request`, `enqueue`, `dequeue`, `register_client`) müssen sicher sein, von mehreren Threads gleichzeitig aufgerufen zu werden. 5. **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.

39
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: 1. **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. 2. **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. 3. **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. 4. **Thread-Sicherheit**: Der Ratenbegrenzer muss sicher aus mehreren Threads gleichzeitig verwendbar sein. Demonstrieren Sie dies mit einem Testszenario. 5. **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: ```python 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

45
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: 1. Der Cache hat eine feste maximale Kapazität, die zur Erstellungszeit angegeben wird. 2. 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. 3. 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. 4. Die Eviktionsstrategie muss strikt LRU sein: Der Eintrag, der am wenigsten kürzlich (durch get oder put) benutzt wurde, muss evakuiert werden. 5. 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.

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

59
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: 1. **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. 2. **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. 3. **find(key)** – Geben Sie den dem Schlüssel zugeordneten Wert zurück oder zeigen Sie das Fehlen an. 4. **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. 5. **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: 1. Vollständiger, kompilierbarer/ausführbarer Quellcode mit Kommentaren, die Ihre Nebenläufigkeitsstrategie erklären. 2. 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). 3. 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.

57 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: 1. Die Eingabestrings parsen, um einen Abhängigkeitsgraphen zu erstellen. 2. Für ein gegebenes `target_package` alle seine Abhängigkeiten (einschließlich transitiver Abhängigkeiten) ermitteln. 3. 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. 4. 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'). 5. 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'.

60
18 Mar 2026 20:21

Programmierung

OpenAI GPT-5 mini VS Anthropic Claude Sonnet 4.6

Einen Paket-Abhängigkeitsauflöser implementieren

Schreiben Sie eine Python-Funktion `resolve(requirements, package_index)`, die einen Abhängigkeitsauflösungsalgorithmus implementiert. Die Funktion soll zwei Argumente annehmen: 1. `requirements`: Eine Liste von Strings, wobei jeder String eine anfängliche Paket-Anforderung ist (z. B. `["A>=1.2.0", "B"]`). 2. `package_index`: Ein Dictionary, das alle verfügbaren Pakete repräsentiert. Die Schlüssel sind Paketnamen. Die Werte sind Dictionaries, in denen die Schlüssel Versions-Strings sind (z. B. '1.2.3') und die Werte Listen von Abhängigkeits-Anforderungs-Strings für diese Version sind. Ihre Funktion soll ein Dictionary zurückgeben, das jeden benötigten Paketnamen (einschließlich transitiver Abhängigkeiten) auf eine einzelne, aufgelöste Versions-String abbildet, die alle Beschränkungen erfüllt. Dies wird oft als "Lock-Datei" bezeichnet. Ihr Algorithmus muss in der Lage sein, transitive Abhängigkeiten und Versionskonflikte zu behandeln. Falls keine gültige Menge von Paketen gefunden werden kann, soll die Funktion eine `ValueError` mit einer klaren Nachricht werfen, die den Konflikt erklärt. Der Einfachheit halber können Sie annehmen: - Versionen folgen dem Semantic Versioning (z. B. '1.2.3'). - Anforderungs-Spezifizierer sind einer der folgenden: `==`, `!=`, `>=`, `<=`, `>`, `<`. Eine Anforderung ohne Spezifizierer (z. B. "B") impliziert, dass jede Version akzeptabel ist. - Ihre Lösung sollte darauf abzielen, für jedes Paket die jeweils neueste mögliche Version auszuwählen, die alle Beschränkungen erfüllt.

65
15 Mar 2026 08:52

Programmierung

OpenAI GPT-5.4 VS Anthropic Claude Haiku 4.5

Log-Datei-Analysator für Benutzeraktivität

Schreiben Sie eine Python-Funktion `analyze_logs(log_data)`, die eine einzelne mehrzeilige Zeichenkette `log_data` als Eingabe entgegennimmt. Jede Zeile in der Zeichenkette stellt einen Log-Eintrag im Format `[TIMESTAMP] LEVEL: MESSAGE` dar. Die Funktion soll diese Logs parsen und ein Dictionary zurückgeben, das die Daten zusammenfasst. Das Zusammenfassungs-Dictionary sollte drei Schlüssel haben: 1. `counts_by_level`: Ein Dictionary, bei dem die Schlüssel Log-Level sind (z. B. 'INFO', 'WARN', 'ERROR') und die Werte die Anzahl der Logs für dieses Level. 2. `successful_logins`: Eine Liste eindeutiger Benutzernamen (Strings), die sich erfolgreich eingeloggt haben. Ein erfolgreicher Login wird durch eine Nachricht wie "User 'username' logged in..." angezeigt. 3. `failed_login_ips`: Ein Dictionary, bei dem die Schlüssel IP-Adressen (Strings) sind und die Werte die Anzahl fehlgeschlagener Login-Versuche von dieser IP. Ein fehlgeschlagener Login wird durch eine Nachricht wie "Failed login attempt for user 'username' from IP 'ip_address'" angezeigt. Ihre Funktion sollte robust sein und fehlerhafte oder irrelevante Log-Zeilen durch Ignorieren handhaben. Das Parsen der Log-Level sollte nicht zwischen Groß- und Kleinschreibung unterscheiden (z. B. sollten 'info' und 'INFO' beide zur Summe zählen, die unter dem Großbuchstaben-Schlüssel 'INFO' gespeichert werden sollte).

68
15 Mar 2026 08:13

Programmierung

OpenAI GPT-5 mini VS Anthropic Claude Haiku 4.5

Implementieren Sie einen Abhängigkeitsauflöser mit semantischer Versionierung

Ihre Aufgabe ist es, eine Funktion zu schreiben, die den Abhängigkeitsauflöser eines Paketmanagers simuliert. Die Funktion soll eine Liste aller verfügbaren Pakete, ein Zielpaket zur Installation und dessen Versionsanforderung entgegennehmen. Sie muss eine flache Liste von Paketen (Name und spezifische Version) zurückgeben, die installiert werden müssen, in einer gültigen topologischen Reihenfolge (Abhängigkeiten vor Abhängigen). Der Resolver muss SemVer (semantische Versionierung) Einschränkungen verarbeiten. Für diese Aufgabe müssen Sie nur exakte Versionen, Caret (`^`) und Tilde (`~`) Spezifizierer unterstützen. - `1.2.3`: Muss genau Version 1.2.3 sein. - `^1.2.3`: Erlaubt Versionen von 1.2.3 bis, aber nicht einschließlich, 2.0.0 (d.h. `>=1.2.3 <2.0.0`). - `~1.2.3`: Erlaubt Versionen von 1.2.3 bis, aber nicht einschließlich, 1.3.0 (d.h. `>=1.2.3 <1.3.0`). Ihre Implementierung muss: 1. Für jedes Paket die höchstmögliche Version auswählen, die alle von anderen Paketen im Abhängigkeitsbaum auferlegten Einschränkungen erfüllt. 2. Eine topologisch sortierte Liste von Paketen für die Installation erzeugen. 3. Fehlerfälle elegant behandeln und melden für: - Nicht auflösbare Versionskonflikte (z. B. wenn eine Abhängigkeit `^1.0.0` und eine andere `^2.0.0` desselben Pakets verlangt). - Zirkuläre Abhängigkeiten (z. B. Paket A hängt von B ab und B hängt von A ab). - Ein benötigtes Paket oder eine benötigte Version nicht verfügbar ist. Sie können jede Programmiersprache für Ihre Implementierung wählen. Definieren Sie die Funktionssignatur und Datenstrukturen nach eigenem Ermessen, machen Sie diese aber klar.

82
15 Mar 2026 06:11

Programmierung

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

Implementieren Sie einen Least Recently Used (LRU)-Cache

Implementieren Sie eine LRU (Least Recently Used) Cache-Datenstruktur in Python, die die folgenden Operationen unterstützt, jeweils mit durchschnittlicher Zeitkomplexität O(1): 1. `get(key)` — Gibt den mit dem Schlüssel verbundenen Wert zurück, falls er im Cache vorhanden ist, andernfalls -1. Der Zugriff auf einen Schlüssel markiert ihn als kürzlich verwendet. 2. `put(key, value)` — Fügt das Schlüssel-Wert-Paar ein oder aktualisiert es. Wenn der Cache seine Kapazität erreicht hat, entfernen Sie das am wenigsten kürzlich verwendete Element, bevor Sie das neue einfügen. Ihre Implementierung sollte eine Klasse namens `LRUCache` mit folgendem Interface sein: ``` cache = LRUCache(capacity) cache.put(key, value) result = cache.get(key) ``` Demonstrieren Sie Ihre Implementierung mit der folgenden Testsequenz: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Expected: 10 cache.put(3, 30) # Evicts key 2 print(cache.get(2)) # Expected: -1 cache.put(4, 40) # Evicts key 1 print(cache.get(1)) # Expected: -1 print(cache.get(3)) # Expected: 30 print(cache.get(4)) # Expected: 40 ``` Anforderungen: - Verwenden Sie NICHT `functools.lru_cache` oder `collections.OrderedDict`. Implementieren Sie die zugrunde liegende Datenstruktur selbst. - Verwenden Sie eine Kombination aus einer Hash-Map und einer doppelt verketteten Liste. - Fügen Sie klare Kommentare hinzu, die Ihren Ansatz erläutern. - Behandeln Sie Randfälle wie eine Kapazität von 0 oder 1. - Stellen Sie den vollständigen, ausführbaren Code einschließlich der obigen Testsequenz mit der erwarteten Ausgabe bereit.

87
12 Mar 2026 19:00

Programmierung

OpenAI GPT-5.2 VS Google Gemini 2.5 Flash

Implementierung eines Least Recently Used (LRU) Caches

Implementieren Sie eine LRU (Least Recently Used) Cache-Klasse in Python, die die folgenden Operationen unterstützt: 1. `LRUCache(capacity)` — Initialisieren Sie den Cache mit einer positiven Ganzzahlkapazität. 2. `get(key)` — Geben Sie den Wert zurück, der dem Schlüssel zugeordnet ist, wenn er im Cache vorhanden ist, andernfalls geben Sie -1 zurück. Der Zugriff auf einen Schlüssel markiert ihn als kürzlich verwendet. 3. `put(key, value)` — Fügen Sie ein Schlüssel-Wert-Paar ein oder aktualisieren Sie es. Wenn der Cache nach dem Einfügen seine Kapazität überschreitet, verwerfen Sie den am wenigsten kürzlich verwendeten Schlüssel. Sowohl `get` als auch `put` müssen eine durchschnittliche Zeitkomplexität von O(1) aufweisen. Stellen Sie eine vollständige, in sich geschlossene Python-Implementierung bereit. Verwenden Sie nicht `functools.lru_cache` oder `collections.OrderedDict`. Sie sollten die zugrunde liegende Datenstruktur selbst implementieren (z. B. unter Verwendung einer doppelt verketteten Liste und einer Hash-Map). Fügen Sie nach Ihrer Klassendefinition eine kurze Demonstration ein, die einen LRUCache mit der Kapazität 2 erstellt und die folgenden Operationen ausführt, wobei das Ergebnis jedes `get` ausgegeben wird: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Erwartet: 10 cache.put(3, 30) # Verwirft Schlüssel 2 print(cache.get(2)) # Erwartet: -1 cache.put(4, 40) # Verwirft Schlüssel 1 print(cache.get(1)) # Erwartet: -1 print(cache.get(3)) # Erwartet: 30 print(cache.get(4)) # Erwartet: 40 ```

81
10 Mar 2026 15:38

Programmierung

OpenAI GPT-5.2 VS Google Gemini 2.5 Pro

Implementierung eines Least Recently Used (LRU) Caches

Implementieren Sie eine LRU (Least Recently Used) Cache-Datenstruktur in Python. Ihre Implementierung sollte eine Klasse namens `LRUCache` sein, die die folgenden Operationen unterstützt: 1. `__init__(self, capacity: int)` — Initialisieren Sie den Cache mit einer positiven Ganzzahl-Kapazität. 2. `get(self, key: int) -> int` — Geben Sie den Wert zurück, der dem Schlüssel zugeordnet ist, falls er im Cache vorhanden ist, andernfalls geben Sie -1 zurück. Der Zugriff auf einen Schlüssel zählt als "Verwendung". 3. `put(self, key: int, value: int) -> None` — Fügen Sie das Schlüssel-Wert-Paar ein oder aktualisieren Sie es. Wenn der Cache nach der Einfügung seine Kapazität überschreitet, verwerfen Sie den am wenigsten zuletzt verwendeten Schlüssel. Sowohl `get` als auch `put` müssen in einer durchschnittlichen Zeitkomplexität von O(1) laufen. Stellen Sie die vollständige Klassenimplementierung bereit. Demonstrieren Sie dann seine Korrektheit, indem Sie die Ausgabe der folgenden Sequenz von Operationen zeigen: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Erwartet: 10 cache.put(3, 30) # Verwirft Schlüssel 2 print(cache.get(2)) # Erwartet: -1 cache.put(4, 40) # Verwirft Schlüssel 1 print(cache.get(1)) # Erwartet: -1 print(cache.get(3)) # Erwartet: 30 print(cache.get(4)) # Erwartet: 40 ``` Erklären Sie kurz, wie Ihre Implementierung eine O(1) Zeitkomplexität für beide Operationen erreicht.

140
09 Mar 2026 03:54

Verwandte Links

X f L