Orivel Orivel
メニューを開く

お題・ディスカッション一覧

公開されている最新のお題やディスカッションをまとめて確認できます。

比較ジャンル

モデル一覧

プログラミング

Google Gemini 2.5 Flash VS OpenAI GPT-5.4

ロックフリーの並行 LRU キャッシュを実装する

Python でスレッドセーフな LRU(Least Recently Used)キャッシュを実装してください。すべての操作でグローバルなロックを使用せず、並行した読み書きをサポートすることを目的とします。実装は以下の要件を満たす必要があります。 1. **インターフェース**: キャッシュは次の操作をサポートしなければなりません: - `__init__(self, capacity: int)` — 与えられた最大容量(正の整数)でキャッシュを初期化する。 - `get(self, key: str) -> Optional[Any]` — キーが存在する場合はその値を返し(最近使用されたものとしてマークする)、存在しない場合は `None` を返す。 - `put(self, key: str, value: Any) -> None` — キーと値のペアを挿入または更新する。挿入後にキャッシュが容量を超える場合は、最も使用されていない項目を削除する。 - `delete(self, key: str) -> bool` — キャッシュからキーを削除する。キーが存在した場合は `True`、存在しなかった場合は `False` を返す。 - `keys(self) -> List[str]` — 現在キャッシュに存在する全てのキーのリストを、最も最近使用された順から最も使用されていない順へ並べて返す。 2. **並行性**: キャッシュは複数のスレッドから同時に安全に使用できなければなりません。可能な限り読み取り同士が互いにブロックしない設計を目指してください(例えば、リード・ライトロック、細粒度ロック、またはロックフリー技術の使用)。すべての操作を直列化する単一のグローバルミューテックスは基準解とは見なされますが、最適な解決策ではありません。 3. **競合下での正しさ**: 同時アクセス下でも、キャッシュは決して古いデータや破損したデータを返してはならず、指定された容量を超えてはならず、一貫した LRU 順序を維持しなければなりません。 4. **扱うべきエッジケース**: - 容量が 1 の場合 - 既に存在するキーに対する `put`(値を更新し、最も最近のものに移動すること) - 存在しないキーに対する `delete` - 同一キーに対する同時の `put` と `get` - 多数のスレッドが同時に挿入する際の急速な連続追い出し(evictions) 5. **テスト**: 単一スレッドおよびマルチスレッドのシナリオで全操作の正しさを示すテスト関数 `run_tests()` を含めてください。マルチスレッドテストは少なくとも 8 スレッドを使い、重複するキーに対して `get`、`put`、`delete` の混合操作を行い、キャッシュが決して容量を超えないこと、また `get` が一度も挿入されていないキーに対して値を返さないことをアサートする必要があります。 完全な実装を Python で提供してください。標準ライブラリのみを使用し、サードパーティのパッケージは使用しないでください。並行性戦略と取った設計上のトレードオフを説明する docstring とコメントを含めてください。

22
2026/03/23 17:47

プログラミング

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.2

カスタム形式の高度なログファイルパーサー

Python関数 `parse_log(log_content: str) -> list` を作成してください。この関数はカスタム形式のログファイルを解析します。関数はログ内容を単一の複数行文字列として受け取り、各辞書が正常に完了したトランザクションを表す辞書のリストを返す必要があります。 **ログ形式のルール:** 1. **`START <transaction_id> <timestamp>`**: トランザクションの開始を示します。`transaction_id` は空白を含まない文字列です。`timestamp` は ISO 8601 形式の文字列です。 2. **`END <transaction_id> <status> <timestamp>`**: トランザクションの終了を示します。`transaction_id` は開いているトランザクションと一致しなければなりません。`status` は単語1つ(例: `SUCCESS`, `FAIL`)です。 3. **`EVENT <key1>=<value1> <key2>="<value with spaces>" ...`**: 現在アクティブなトランザクション内のイベントを表します。1つ以上のキーと値のペアで構成されます。空白を含む値は二重引用符で囲まれている必要があります。 4. **`COMMENT # <any text>`**: 無視すべきコメント行です。 **処理ロジック:** * 関数は行を順次処理する必要があります。 * `EVENT` 行は、まだ終了していない直近に開始されたトランザクションに関連付けられます。 * トランザクションは、同じ `transaction_id` を持つ `START` と `END` 行が対応している場合のみ完了かつ有効と見なされます。 * 出力は辞書のリストとします。各辞書は1つの完了したトランザクションを表し、以下のキーを持たなければなりません: * `transaction_id` (string) * `start_time` (string) * `end_time` (string) * `status` (string) * `events` (辞書のリスト。各内側の辞書は1行の `EVENT` のキーと値のペアを表します。) **エラー処理と特殊ケース:** * 任意の `COMMENT` 行、空行、または指定された形式に一致しない不正な行は無視してください。 * 最初の `START` の前やトランザクションが閉じられた後など、アクティブなトランザクションの外で発生する `EVENT` は無視してください。 * 新しい `START` 行が前のトランザクションが `END` で閉じられる前に出現した場合、前のトランザクションは「破棄(abandoned)」されたものと見なし破棄してください。新しい `START` 行は新しいトランザクションを開始します。 * ログファイルの終わりでまだ開いているトランザクションも「破棄」され、最終出力に含めないでください。

30
2026/03/23 08:42

プログラミング

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

スライディングウィンドウと優先度付きキューを備えた並行レートリミッタを実装する

スレッドセーフなレートリミッタを Python で設計および実装してください。以下の機能をサポートすること。 1. **スライディングウィンドウによるレート制限**: リミッタはスライディングウィンドウアルゴリズム(固定ウィンドウではない)を用いてリクエスト数を追跡すること。`window_seconds` の期間内に許可される最大 `max_requests` を与えられたとき、任意の時点で新しいリクエストが許可されるかどうかを正確に判定できること。 2. **複数の階層(ティア)**: レートリミッタは名前付きの複数のティア(例: "free", "standard", "premium")をサポートし、各ティアごとに独自の `max_requests` と `window_seconds` の設定を持つこと。クライアントは登録時にティアが割り当てられる。 3. **遅延リクエストのための優先度付きキュー**: リクエストがレート制限された場合、単に拒否するのではなく、ティアごとの優先度付きキューにエンキューすること。各リクエストは整数の優先度を持ち(数値が小さいほど高優先度)、容量が空いたときに特定クライアントのために待機中の最も高優先度のリクエストをデキューして処理するメソッドを提供すること。 4. **スレッドセーフ**: `allow_request`, `enqueue`, `dequeue`, `register_client` のすべての操作は複数スレッドから同時に呼び出しても安全でなければならない。 5. **クリーンアップ**: 直近 `cleanup_threshold_seconds`(設定可能)よりも長くリクエストを行っていないクライアントの追跡データを削除するメソッドを提供すること。 実装には以下を含めること: - 説明されたインターフェースを持つ `RateLimiter` クラス。 - 少なくとも `client_id`, `timestamp`, `priority`, `payload` を持つ `Request` dataclass または named tuple。 - 重複したクライアント登録、未登録クライアントからのリクエスト、空の優先度キュー、同時変更、クロック精度の問題などのエッジケースへの適切な対応。 さらに、デモ用スクリプトを `if __name__ == "__main__"` ブロック内に書くこと。デモでは以下を行うこと: - 少なくとも 2 つのティアを持つレートリミッタを作成する。 - 複数のクライアントを登録する。 - 複数スレッドからのバーストリクエストをシミュレートし、一部が許可され、他がエンキューされる様子を示す。 - 容量が空いたときに遅延リクエストが処理される様子を示す。 - イベントのシーケンスがわかるように明確な出力を表示する。 コメント内で設計上の選択を説明すること。特にスライディングウィンドウの実装、同期プリミティブの選択、および精度と性能の間のトレードオフについて記述すること。

39
2026/03/21 08:40

プログラミング

Google Gemini 2.5 Pro VS OpenAI GPT-5.2

スライディングウィンドウと優先度付きキューを備えた同時実行レートリミッタを実装する

Pythonで、次の機能をサポートするスレッドセーフなレートリミッタを設計・実装してください。 1. **スライディングウィンドウによるレート制限**: 固定時間ウィンドウを使うのではなく、真のスライディングウィンドウアルゴリズムを実装してください。各クライアント(文字列キーで識別)は、任意の連続する window_seconds 秒の間に最大で max_requests 件のリクエストを許容されます。 2. **優先度レベル**: 各リクエストには優先度レベル(整数 1-5、1 が最も高い優先度)が付与されます。クライアントのレート上限に達した場合、低優先度(数値が大きい)なリクエストが優先的に拒否されるべきです。具体的には、優先度 P の新しいリクエストが到着しウィンドウが満杯である場合、リミッタは現在のウィンドウ内に P より厳密に低い優先度(すなわち数値が P より大きい)を持つリクエストが存在するかを確認します。存在する場合は、最も低優先度(数値が最大)のリクエストのスロットを「取り上げ(revoked)」て、新しい高優先度リクエストを受け入れます。取り上げられたリクエストは報告できるよう記録されるべきです。取り上げ可能な低優先度のリクエストが存在しない場合は、新しいリクエストは拒否されます。 3. **バースト許容**: 各クライアントはオプションで burst(デフォルトは 0)というバースト許容量を持てます。これはウィンドウ内で max_requests に加えて最大 burst 件まで追加のリクエストを許容します。ただし、これはクライアントの現在のウィンドウにおける最初のリクエストから半分以上のウィンドウ時間が経過している場合に限ります。 4. **スレッドセーフ**: レートリミッタは複数のスレッドから同時に使用しても安全でなければなりません。これをテストシナリオで実証してください。 5. **統計**: リミッタはクライアントごとの統計を追跡する必要があります: 許可された(admitted)合計リクエスト数、拒否された(rejected)合計、取り上げられた(revoked、より高優先度のリクエストにより追い出された)合計、現在のウィンドウ利用率(0.0〜1.0 の浮動小数点)を追跡してください。 次のインターフェースを実装してください: ```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: """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. """ ... ``` 完全かつ実行可能な実装を提供し、次を含むデモスクリプトを添付してください: - max_requests=5, window_seconds=10.0, default_burst=2 でリミッタを作成 - 2 人のクライアントからの優先度とタイムスタンプが異なる一連のリクエストをシミュレートし、すべての機能(スライディングウィンドウの期限切れ、優先度による取り上げ、バーストの発動、拒否)を網羅する - 最後に各クライアントの統計と取り上げログを表示 - 少なくとも 4 スレッドを使った簡潔なマルチスレッドテストを含め、同時実行を確認する 次のようなエッジケースにも対応してください: - 優先度値検証(1-5 の範囲でなければならない) - ウィンドウ境界でちょうど到着するリクエスト - 連続した複数の取り上げが発生する場合 - バースト許容がちょうどウィンドウ半分の時点で発動する場合 - 空または未知のクライアント ID に対する統計問い合わせ

45
2026/03/19 14:46

プログラミング

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5.2

ロックフリーの並行LRUキャッシュを実装する

PythonでスレッドセーフなLRU(Least Recently Used、最小最近使用)キャッシュを設計および実装してください。各操作ごとにグローバルロックを使用せずに、同時並行の読み取りおよび書き込みをサポートすること。実装は次の要件を満たす必要があります: 1. キャッシュは、コンストラクタ時に指定された固定の最大容量を持つこと。 2. 次の3つの操作をサポートすること: - get(key): キーに関連付けられた値を返す。キーが存在しない場合は None を返す。キーへのアクセスは、そのキーを最も最近使用されたものとしてマークすること。 - put(key, value): キーと値のペアを挿入または更新する。キャッシュが容量に達しており新しいキーを挿入する場合、最も最近使用されていない(LRU)エントリを追い出すこと。 - delete(key): キーが存在する場合はキャッシュから削除する。キーが見つかって削除された場合は True を、そうでなければ False を返すこと。 3. キャッシュは複数のスレッドから同時に安全に使用できること。異なるキーに対する同時の get 操作は互いにブロックすべきではない。競合を最小化すること — 全てに対して粗い単一のロックをかける設計は許容されない。 4. 追い出しポリシーは厳密な LRU であること:get または put によって最も最近アクセスされていないエントリが追い出されること。 5. エッジケースを扱うこと:容量が1の場合、追い出しを引き起こす急速な同時 put 操作、異なるスレッドから同一キーに対する get/put/delete の交錯、容量がゼロまたは負の場合(ValueError を送出)を含む。 単一の Python モジュールとして完全な実装を提供してください。並行性戦略とそれが整合性を保つ理由の簡潔な説明を付けてください。また、main ブロックまたはテスト関数内で複数のスレッドを生成し、混合した get/put/delete 操作を実行してキャッシュが決して容量を超えずデータ破損が発生しないことをアサートする短いデモも含めてください。

59
2026/03/19 11:51

プログラミング

Google Gemini 2.5 Pro VS Anthropic Claude Sonnet 4.6

履歴クエリ対応のバージョン付きキー・バリューストアを実装する

履歴参照をサポートする、インメモリのバージョン管理付きキー・バリューストアを実装するコードを書いてください。ストアは空の状態で開始し、一連のコマンドを処理します。成功した各更新系コマンドは、1 から始まるグローバルなバージョン番号をちょうど 1 つ新たに作成します。読み取り専用コマンドはバージョンを作成してはなりません。 キーと値は、スペースを含まない大文字小文字を区別する文字列です。バージョンは正の整数です。 コマンド: SET key value value で key を作成または上書きします。 DELETE key 存在する場合は key を削除します。 GET key key の現在の値を返します。key が存在しない場合は NULL を返します。 GET_VERSION key version 指定されたグローバルバージョンが作成された直後の key に対応する値を返します。そのバージョン時点で key が存在しなかった場合は NULL を返します。version が最新の既存バージョンより大きい場合は無効とみなし、INVALID_VERSION を返します。 HISTORY key その key のすべての履歴状態を、削除も含めて、バージョン昇順で返します。形式は version:value の組をカンマで区切ったものとします。削除された状態、または更新後に存在しない状態には NULL を使用してください。その key がいかなる更新系コマンドによっても一度も影響を受けたことがない場合は、EMPTY を返します。 入力形式: 1 行目にはコマンド数を表す整数 N が含まれます。 次の N 行には、それぞれ 1 つのコマンドが含まれます。 出力形式: 各 GET、GET_VERSION、HISTORY コマンドについて、結果を 1 行ずつ出力してください。 動作の詳細と境界ケース: - 値が変わらない場合でも、すべての SET は常に新しいバージョンを作成します。 - キーが存在しない場合でも、すべての DELETE は常に新しいバージョンを作成します。 - バージョンはキーごとではなく、すべてのキーで共有されるグローバルなものです。 - ある key の HISTORY には、その key が SET または DELETE によって直接影響を受けたバージョンのみを含めてください。 - key が削除された後で再び設定された場合は、両方の出来事が HISTORY に現れなければなりません。 - 効率性が重要です: コマンド数は最大 200000 で、多数の履歴クエリがあるものと仮定してください。 あなたの解答は標準入力から読み取り、標準出力に書き込む必要があります。完全に動作するプログラム全体を 1 つのファイルに含めてください。一般的なプログラミング言語であればどれを使用してもかまいませんが、コードは完全であり、書かれたとおりに実行可能でなければなりません。

59
2026/03/18 22:33

プログラミング

Google Gemini 2.5 Flash VS OpenAI GPT-5.2

範囲クエリを備えたロックフリー並行スキップリストを実装する

任意の言語(C++、Java、Rust、Go、または Python)で、以下の操作をサポートする並行スキップリストデータ構造を設計し、実装してください。 1. **insert(key, value)** – キーと値のペアを挿入する。キーがすでに存在する場合は、値をアトミックに更新する。新しいキーが挿入された場合は true、更新だった場合は false を返す。 2. **remove(key)** – キーと値のペアを論理削除する。キーが見つかって削除された場合は true、それ以外は false を返す。 3. **find(key)** – キーに対応する値を返すか、存在しないことを示す。 4. **range_query(low, high)** – low <= key <= high を満たすすべてのキーと値のペアを、キー順にソートされたリストとして返す。結果は一貫したスナップショットでなければならない。すなわち、操作の実行中に同時に存在したことが一度もないキーを含んではならない。 5. **size()** – アクティブな(削除されていない)要素数のおおよその値を返す。 要件と制約: - スキップリストは、上記の操作を任意に組み合わせて同時実行する複数スレッドによる並行利用に対して安全でなければならず、単一のグローバルロックを用いてはならない。細粒度ロック、ロックフリー技法(CAS)、またはその組み合わせを使用してよい。 - 遅延削除は許容される。ノードは物理削除の前に、削除済みとして論理的にマークされてもよい。 - 確率的なレベル生成は、p=0.5、最大レベル 32 の標準的な幾何分布を使用しなければならない。 - キーは 64 ビット整数、値は文字列とする。 - 適切なメモリ安全性への配慮を含めること。ガベージコレクションのない言語を使用する場合は、再利用戦略(例: エポックベース再利用、ハザードポインタ)を説明するか実装すること。 提出物: 1. 並行性戦略を説明するコメント付きの、完全でコンパイル可能/実行可能なソースコード。 2. 複数スレッドを起動して insert、delete、find、range query を並行実行し、正しさを検証するテストまたはデモンストレーション(例: 更新の取りこぼしがないこと、範囲クエリでファントムリードがないこと、クラッシュしないこと)。 3. 以下を論じる簡潔な分析セクション(コメントまたは docstring でも可): - あなたの実装が提供する線形化可能性(またはスナップショット分離)の保証。 - 各操作の期待時間計算量。 - 既知の制限や潜在的な ABA 問題、およびそれにどう対処しているか。 あなたの解答は、並行実行下での正しさ、コードの明瞭性、並行性戦略の堅牢性、範囲クエリのスナップショット機構の品質、分析の徹底性に基づいて評価されます。

57 1
2026/03/18 22:05

プログラミング

Anthropic Claude Sonnet 4.6 VS OpenAI GPT-5.4

Pythonで依存関係リゾルバを実装する

あなたは、シンプルなパッケージ管理システム向けの依存関係リゾルバを作成する任務を与えられています。指定されたパッケージとその依存関係について、正しいインストール順序を決定する Python 関数 `resolve_dependencies(package_definitions, target_package)` を書いてください。 `package_definitions` 引数は文字列のリストです。各文字列は、`'PackageName: Dep1, Dep2, ...'` という形式で、あるパッケージとその直接依存関係を定義します。パッケージに依存関係がない場合の形式は `'PackageName:'` です。 あなたの関数は次のことを行う必要があります: 1. 入力文字列を解析して依存関係グラフを構築する。 2. `target_package` が与えられたとき、そのすべての依存関係(推移的依存関係を含む)を見つける。 3. インストール順序を表す文字列の単一のリストを返す。このリストはトポロジカルソートされていなければならない(依存先は、それに依存するパッケージより常に前に現れなければならない)。`target_package` 自体はリストの最後の項目でなければならない。リストには重複を含めてはならない。 4. 循環依存を検出する。循環が見つかった場合は、循環を明確に示すメッセージ付きで `ValueError` を送出すること(例: `'Circular dependency detected involving: A -> B -> A'`)。 5. 不足しているパッケージを検出する。あるパッケージが `package_definitions` 内で定義されていない依存関係を列挙している場合は、`'Missing package definition for: C'` のようなメッセージ付きで `ValueError` を送出すること。

60
2026/03/18 20:21

プログラミング

OpenAI GPT-5 mini VS Anthropic Claude Sonnet 4.6

パッケージ依存関係リゾルバを実装する

依存関係解決アルゴリズムを実装する Python 関数 `resolve(requirements, package_index)` を記述してください。 関数は2つの引数を受け取ります: 1. `requirements`: 各文字列が初期パッケージ要件である文字列のリスト(例: `["A>=1.2.0", "B"]`)。 2. `package_index`: 利用可能なすべてのパッケージを表す辞書。キーはパッケージ名、値はバージョン文字列(例: '1.2.3')をキーとし、そのバージョンの依存要件文字列のリストを値に持つ辞書です。 関数は、必要な各パッケージ名(依存の伝播を含む)を単一の、すべての制約を満たす解決済みバージョン文字列にマッピングする辞書を返すべきです。これはしばしば「ロックファイル」と呼ばれます。 アルゴリズムは、伝搬依存関係(transitive dependencies)とバージョン競合を処理できなければなりません。有効なパッケージ集合が見つからない場合、関数は競合を説明する明確なメッセージ付きで `ValueError` を発生させるべきです。 単純化のために次の仮定を置けます: - バージョンはセマンティックバージョニングに従う(例: '1.2.3')。 - 要件指定子は次のいずれかである: `==`, `!=`, `>=`, `<=`, `>`, `<`。指定子なしの要件(例: "B")は任意のバージョンが許容されることを意味します。 - 解法は、各パッケージについて可能な限り最新のバージョンを選択することを目指してください。

65
2026/03/15 08:52

プログラミング

OpenAI GPT-5.4 VS Anthropic Claude Haiku 4.5

ユーザーアクティビティのログファイル解析

単一の複数行文字列 `log_data` を引数に取る Python 関数 `analyze_logs(log_data)` を記述してください。文字列内の各行は `[TIMESTAMP] LEVEL: MESSAGE` という形式のログエントリを表します。関数はこれらのログを解析し、データを要約した辞書を返すべきです。 要約辞書は3つのキーを持つべきです: 1. `counts_by_level`: キーがログレベル(例: 'INFO', 'WARN', 'ERROR')で、値がそのレベルのログ件数である辞書。 2. `successful_logins`: 正常にログインした一意のユーザー名(文字列)のリスト。成功したログインは、例えば「User 'username' logged in...」のようなメッセージで示されます。 3. `failed_login_ips`: キーがIPアドレス(文字列)で、値がそのIPからの失敗したログイン試行の回数である辞書。失敗したログインは、例えば「Failed login attempt for user 'username' from IP 'ip_address'」のようなメッセージで示されます。 関数は堅牢であり、形式不正または無関係なログ行を無視することで適切に処理するべきです。ログレベルの解析は大文字小文字を区別しない(例: 'info' と 'INFO' はどちらも合計にカウントされ、合計は大文字のキー 'INFO' の下に格納される)べきです。

68
2026/03/15 08:13

プログラミング

OpenAI GPT-5 mini VS Anthropic Claude Haiku 4.5

セマンティックバージョニングを用いた依存関係リゾルバを実装する

あなたのタスクは、パッケージマネージャの依存関係リゾルバをシミュレートする関数を書くことです。関数は、利用可能なすべてのパッケージのリスト、インストール対象のパッケージ、およびそのバージョン要件を受け取り、インストールする必要のあるパッケージ(名前と特定バージョン)のフラットなリストを、有効なトポロジカル順序(依存先が先、依存元が後)で返さなければなりません。 リゾルバはセマンティックバージョニング(SemVer)の制約を扱わなければなりません。本課題では、厳密バージョン(exact versions)、キャレット(`^`)、およびチルダ(`~`)の指定子のみをサポートすれば十分です。 - `1.2.3`: 正確にバージョン1.2.3でなければなりません。 - `^1.2.3`: 1.2.3以上かつ2.0.0より小さいバージョンを許容します(すなわち `>=1.2.3 <2.0.0`)。 - `~1.2.3`: 1.2.3以上かつ1.3.0より小さいバージョンを許容します(すなわち `>=1.2.3 <1.3.0`)。 実装においては次を満たす必要があります: 1. 依存関係ツリー内で他のパッケージが課すすべての制約を満たす、可能な限り最高のバージョンを各パッケージについて選択すること。 2. インストール用のトポロジカルにソートされたパッケージ一覧を生成すること。 3. 次のエラーを優雅に扱い、報告すること: - 解決不能なバージョンの競合(例:同じパッケージに対して一方の依存が `^1.0.0` を要求し、別の依存が `^2.0.0` を要求する場合)。 - 循環依存(例:パッケージAがBに依存し、BがAに依存する場合)。 - 必要なパッケージまたはバージョンが存在しない場合。 実装言語は任意に選べます。関数のシグネチャとデータ構造は自由に定義してください。ただし、それらを明確に示してください。

82
2026/03/15 06:11

プログラミング

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

最も最近使用されていない(LRU)キャッシュを実装する

PythonでLRU(Least Recently Used)キャッシュデータ構造を実装してください。各操作は平均時間計算量O(1)で動作する必要があります: 1. `get(key)` — キャッシュにキーが存在すればそのキーに関連付けられた値を返します。存在しない場合は -1 を返します。キーにアクセスすると、そのキーは最近使用されたものとみなされます。 2. `put(key, value)` — キーと値のペアを挿入または更新します。キャパシティに達している場合は、新しい要素を挿入する前に最も最近使用されていない項目を削除します。 実装は `LRUCache` という名前のクラスとし、インターフェースは次のとおりです: ``` cache = LRUCache(capacity) cache.put(key, value) result = cache.get(key) ``` 以下のテストシーケンスで実装を示してください: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # 期待: 10 cache.put(3, 30) # キー2を削除(追い出し) print(cache.get(2)) # 期待: -1 cache.put(4, 40) # キー1を削除(追い出し) print(cache.get(1)) # 期待: -1 print(cache.get(3)) # 期待: 30 print(cache.get(4)) # 期待: 40 ``` 要件: - `functools.lru_cache` または `collections.OrderedDict` を使用してはならない。 - ハッシュマップと双方向連結リストの組み合わせを使用すること。 - アプローチを明確に説明するコメントを含めること。 - 容量が0または1の場合などのエッジケースを処理すること。 - 上記のテストシーケンスとその期待される出力を含む、完全に実行可能なコードを提供すること。

87
2026/03/12 19:00

プログラミング

OpenAI GPT-5.2 VS Google Gemini 2.5 Flash

Least Recently Used (LRU) キャッシュの実装

LRU(Least Recently Used)キャッシュクラスをPythonで実装してください。以下の操作をサポートする必要があります。 1. `LRUCache(capacity)` — キャッシュを正の整数容量で初期化します。 2. `get(key)` — キーが存在する場合は、それに関連付けられた値を返します。存在しない場合は -1 を返します。キーにアクセスすると、そのキーが最近使用されたものとしてマークされます。 3. `put(key, value)` — キーと値のペアを挿入または更新します。挿入後にキャッシュが容量を超えた場合、最も最近使用されていないキーを削除します。 `get` と `put` の両方は、平均 O(1) の時間計算量で実行される必要があります。 完全で自己完結したPython実装を提供してください。`functools.lru_cache` または `collections.OrderedDict` を使用しないでください。基盤となるデータ構造(例:双方向連結リストとハッシュマップ)を自分で実装する必要があります。 クラス定義の後、容量 2 の `LRUCache` を作成し、以下の操作を実行して、各 `get` の結果を印刷する短いデモンストレーションを含めてください。 ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # 期待値: 10 cache.put(3, 30) # キー 2 を削除 print(cache.get(2)) # 期待値: -1 cache.put(4, 40) # キー 1 を削除 print(cache.get(1)) # 期待値: -1 print(cache.get(3)) # 期待値: 30 print(cache.get(4)) # 期待値: 40 ```

81
2026/03/10 15:38

プログラミング

OpenAI GPT-5.2 VS Google Gemini 2.5 Pro

LRUキャッシュの実装

PythonでLRU(Least Recently Used)キャッシュデータ構造を実装してください。実装は`LRUCache`という名前のクラスで、以下の操作をサポートする必要があります。 1. `__init__(self, capacity: int)` — キャッシュを正の整数`capacity`で初期化します。 2. `get(self, key: int) -> int` — キーが存在する場合は、それに関連付けられた値を返します。存在しない場合は-1を返します。キーへのアクセスは「使用」とみなされます。 3. `put(self, key: int, value: int) -> None` — キーと値のペアを挿入または更新します。挿入後、キャッシュが容量を超えた場合は、最も最近使用されていないキーを削除します。 `get`と`put`の両方は、平均O(1)の時間計算量で実行される必要があります。 完全なクラス実装を提供してください。次に、次の操作シーケンスの出力によってその正しさを実証してください。 ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # 期待値: 10 cache.put(3, 30) # キー2を削除 print(cache.get(2)) # 期待値: -1 cache.put(4, 40) # キー1を削除 print(cache.get(1)) # 期待値: -1 print(cache.get(3)) # 期待値: 30 print(cache.get(4)) # 期待値: 40 ``` 実装によって両方の操作でO(1)の時間計算量がどのように達成されるか簡単に説明してください。

140
2026/03/09 03:54

関連リンク

X f L