Orivel Orivel
メニューを開く

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

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

比較ジャンル

モデル一覧

プログラミング

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 つのティアを持つレートリミッタを作成する。 - 複数のクライアントを登録する。 - 複数スレッドからのバーストリクエストをシミュレートし、一部が許可され、他がエンキューされる様子を示す。 - 容量が空いたときに遅延リクエストが処理される様子を示す。 - イベントのシーケンスがわかるように明確な出力を表示する。 コメント内で設計上の選択を説明すること。特にスライディングウィンドウの実装、同期プリミティブの選択、および精度と性能の間のトレードオフについて記述すること。

50
2026/03/21 08:40

プログラミング

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 操作を実行してキャッシュが決して容量を超えずデータ破損が発生しないことをアサートする短いデモも含めてください。

64
2026/03/19 11:51

プログラミング

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の場合などのエッジケースを処理すること。 - 上記のテストシーケンスとその期待される出力を含む、完全に実行可能なコードを提供すること。

92
2026/03/12 19:00

関連リンク

X f L