Orivel Orivel
メニューを開く

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

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

比較ジャンル

モデル一覧

プログラミング

Anthropic Claude Sonnet 5 VS OpenAI GPT-5.6

Webサーバーログアナライザー

Python 関数 analyze_logs(log_data) を作成してください。この関数は、Web サーバのログエントリを含む複数行の文字列を受け取ります。関数はこれらのログを解析し、分析を行い、結果を要約した辞書を返す必要があります。 有効なログ行は次の形式に従います: [TIMESTAMP] LEVEL IP_ADDRESS "REQUEST_METHOD /path" RESPONSE_CODE BYTES_SENT 有効な行の例: [2023-10-27T10:00:00Z] INFO 192.168.1.1 "GET /index.html" 200 1543 関数は次のことを行う必要があります: 有効なログ行のみを解析し、形式が崩れた行や空行は問題なく無視すること。 次の指標を計算すること: total_requests: 有効なログエントリの総数。 error_rate: LEVEL が ERROR のリクエストの割合(パーセンテージ)、小数点以下2桁に丸めること。 top_3_ips: タプルのリスト。各タプルは IP アドレスとそのリクエスト数を含み、リクエスト数の多い順に並べた上位3つの IP を含むこと。 busiest_hour: 1日の中でリクエストが最も多かった時間(0〜23 の整数)。タイムスタンプは ISO 8601 形式(UTC)です。 計算した値を持つ total_requests、error_rate、top_3_ips、busiest_hour のキーを含む辞書を返すこと。 次のエッジケースを扱ってください: 入力文字列 log_data が空の場合、適切にゼロまたは空の値を持つ辞書を返してください(例: total_requests: 0、top_3_ips: [])。 ユニークな IP アドレスが3つ未満の場合、top_3_ips リストには存在するすべてのユニークな IP をカウントの多い順に含めてください。 最も混雑した時間帯が同率の場合、同率のうちのどれか一つの時間を返して構いません。

262
2026/07/25 01:19

プログラミング

OpenAI GPT-5.6 VS Google Gemini 2.5 Pro

スライディングウィンドウと公平なマルチテナント割当を備えたレートリミッタ

任意の言語(Python、Go、TypeScript、Java、または Rust)で再利用可能なレートリミッタライブラリを実装してください。このライブラリはスライディングウィンドウアルゴリズムを使用してクライアントごとのリクエストクォータを強制し、かつ複数テナント間での公平な共有ポリシーを提供する必要があります。 機能要件: allow(tenant_id, client_id, now_ms) のようなメソッドを持つクラスまたはモジュールを提供し、リクエストが許可されるかどうかを返し、拒否された場合は次にリクエストが許可されるまでのミリ秒数(retry_after_ms)も返すこと。 各クライアントはローリングウィンドウ内での最大リクエスト数に制限される(例:60,000 ms あたり 100 リクエスト)。この構成はテナントごとに調整可能であること。 固定のカレンダーバケットウィンドウではなく、真のスライディングウィンドウ(重み付けまたはタイムスタンプログベース)を実装し、バケット境界を跨ぐバーストを正しく扱うこと。 テナント全体の上限(per-tenant global cap)を追加し、テナント内のすべてのクライアントの合計がテナントレベルの上限を超えないようにすること。テナントが飽和している場合、残りの容量は1つのクライアントに独占されるのではなく、アクティブなクライアント間で公平に共有されること。 リミッタは複数のスレッドや非同期タスクからの同時アクセスに対して安全であること。 メモリが無制限に増加しないこと:古いクライアント状態は時間経過で削除またはコンパクト化されること。 成果物: 明確な公開APIと重要な設計判断に関するインラインドキュメントを含む完全な実装。 選択したスライディングウィンドウアルゴリズムとその精度/メモリトレードオフに関する簡潔な説明(コメント内または短い本文セクション)。 以下のコアエッジケースをカバーするテストスイート。 コードとテストで明示的に対処すべきエッジケース: ウィンドウの境界でちょうど発生するリクエスト。 クライアントがアイドル状態になり、その後ウィンドウが完全に経過した後に戻ってくる場合。 同じクライアントカウンタに対する同時リクエストの競合。 時計が後退する場合や重複タイムスタンプ。 テナントの飽和と競合するクライアント間での公平な再分配。 アクティブなクライアントを落とさずに古いクライアント状態を削除すること。 仮定を明記してください(単一プロセス対分散、単調クロックの利用可能性など)。単一プロセスを仮定する場合は、設計を分散デプロイに拡張する方法を簡単に説明してください。

269
2026/07/16 09:49

プログラミング

Anthropic Claude Opus 4.8 VS Google Gemini 2.5 Flash

決定論的リミットオーダーブック・シミュレータを実装する

単一ファイルの Python 3.11 ソリューションを作成し、関数 process_events(events: list[dict]) -> dict を実装してください。外部パッケージを使用しないでください。 この関数は、1つの銘柄の小さな取引所のリミットオーダーブックをシミュレートする必要があります。入力順序のイベント辞書のリストを受け取り、正確に次のキーを持つ辞書を返します: trades, rejected, book。 Event types: New order event: Required fields: type="new", id, side, order_type, qty. side は "buy" または "sell" です。 order_type は "limit" または "market" です。 qty は正の整数です。 limit 注文は price(セント単位の正の整数)も必須です。 オプションのフィールド tif は time-in-force で、"GTC", "IOC", または "FOK" のいずれかです。指定がなければ、limit 注文は "GTC" を、market 注文は "IOC" を使用してください。 market 注文は tif="GTC" を持つことはできず、book 上で残存してはなりません。 Cancel event: Required fields: type="cancel", id. それは、その id を持つ現在 book に残っている注文の残数量をキャンセルします。 Matching rules: book は bids と asks を持ちます。resting buy limit 注文は bids です;resting sell limit 注文は asks です。 価格-時間優先が必須です:最良価格が先;同一価格では、より早く受理された resting 注文が先です。 buy 注文は交差する限り resting ask とマッチします:market buy は任意の ask と交差します;limit buy は ask price <= buy limit price の ask と交差します。 sell 注文は交差する限り resting bid とマッチします:market sell は任意の bid と交差します;limit sell は bid price >= sell limit price の bid と交差します。 各トレードの数量は min(到着注文の残数量, resting 注文の残数量) です。 トレード価格は常に resting maker 注文の limit price であり、到着注文の価格では決してありません。 トレードが発生したら直ちに、正確に次のキーを持つトレード記録を追加しなければなりません: buy_id, sell_id, price, qty, taker_id, maker_id. 部分的に約定した resting 注文は、残数量で元の優先順位を保持します。完全に約定した注文は book から離脱します。 Time-in-force behavior: GTC limit 注文は、未約定の残りを book に残します。 IOC 注文は可能な限り即時に実行し、残りはキャンセルします。 FOK 注文は、現在の book と交差ルールに従って即時に完全に埋められる必要があります。完全に埋められない場合、トレードを一切生成せず、book を変更しません。完全に埋められる場合は通常通り実行します。FOK 注文は決して残りません。 Validation and rejection rules: イベントが不正な形式の場合、book を変更せずにそれを拒否してください。拒否レコードを rejected に追加し、キーは input_index, event, reason とします。reason は短い人間可読の文字列で構いません。 新しい注文の id が以前に受理されたどの new 注文でも既に使われている場合(その先の注文が既に約定またはキャンセルされていても)その new 注文を拒否してください。 不明な id やもはや resting していない id に対する cancel イベントを拒否してください。 qty と price の値が非整数、ゼロ、または負の場合は拒否してください。Python では、bool はこれらのフィールドの整数として受け入れてはいけません。 その他の余分なフィールドは、有効なイベントであれば無視してください。 Return format: trades: 実行順のトレード記録のリスト。 rejected: 入力順の拒否レコードのリスト。 book: keys が bids と asks の辞書。 book["bids"] は、降順の価格、次に元の resting 時刻でソートされたすべての resting bid をリスト化し、各要素は {"id": id, "price": price, "qty": remaining_qty} とします。 book["asks"] は、昇順の価格、次に元の resting 時刻でソートされたすべての resting ask をリスト化し、各要素は {"id": id, "price": price, "qty": remaining_qty} とします。 あなたの回答は、process_events を定義する完全な実行可能な Python コードであるべきです。ヘルパーのクラス/関数や if name == "main": で保護された小さなセルフテストセクションを含めても構いませんが、コア関数は stdin から読み取ったり stdout に書き出したりしてはいけません。

294
2026/06/29 09:44

プログラミング

Anthropic Claude Opus 4.8 VS Google Gemini 2.5 Pro

PythonでのアトミックなJSON Patch適用を実装する

Python 3.11で、apply_json_patch(document, patch)という名前の関数を実装してください。この関数は、JSON Patchスタイルの操作列をJSON互換の値に適用し、パッチ適用後の値を返します。入力のdocumentはdict、list、str、int、float、bool、Noneの任意の組み合わせで構成され得ます。patchは操作dictのリストです。実装は元のdocumentやそこから到達可能な任意のネストされたオブジェクトを変更してはなりません。いずれかの操作が無効な場合、関数はJsonPatchErrorという名前のカスタム例外クラスを送出し、元のdocumentは不変(変更されない)であることを保証しなければなりません。サポートされる操作はadd、remove、replace、move、copy、testです。JSON Pointerのパスをスラッシュ区切りトークンで用いてください。空文字列はドキュメント全体を識別し、トークンは~1を/に、~0を~にデコードし、その他の~の使用は無効とします。オブジェクトに対しては、パストークンはキーです。配列に対しては、パストークンは先頭に余分なゼロがない非負整数でなければならず(ただしトークンが単一の"0"である場合は許容)、add操作に限り最後のトークンとして"-"が許容され、配列の末尾に追加します。add操作は、配列に対しては0からlen(array)までのインデックスに挿入し、"-"では末尾に追加し、オブジェクトに対してはキーを設定し、パスが空文字列の場合はドキュメント全体を置き換えます。remove操作は対象が存在することを要求し、それを削除します。replace操作は対象が存在することを要求し、それを置換します。move操作はfromとpathを要求し、fromで指定された場所の値を削除してpathに追加し、値を自身の子孫の一つへ移動することは拒否しなければなりません。copy操作はfromとpathを要求し、ソース値をターゲットへディープコピーします。test操作はvalueを要求し、現在のターゲットがvalueと深く等しい場合にのみ成功します(数値については通常のPythonの等価性、文字列・ブール・Noneについては厳密な等価性を含みます)。各操作dictは、その操作に必要なフィールドとopフィールドのみを正確に含まなければなりません;未知のフィールドや欠落フィールドはエラーです。関数は決定論的で、合理的に効率的であり、Python標準ライブラリのみを使用してください。必要なヘルパー関数やクラスを含めてください。コマンドラインプログラムを書いたり外部パッケージを使用したりしてはいけません。

343
2026/06/15 09:43

プログラミング

OpenAI GPT-5.5 VS Google Gemini 2.5 Flash

スライディングウィンドウとバースト許容を備えたレートリミッタ

スライディングウィンドウ会計とバースト許容をサポートする、スレッドセーフなレートリミッタを選択した言語(Python, Go, Java, TypeScript, または Rust)のいずれかで設計・実装してください。要件は次のとおりです。 API surface: 少なくとも次の操作を公開してください: allow(client_id: str, cost: int = 1) -> bool — 現時点でリクエストが許可されるかどうかを返します。 retry_after(client_id: str) -> float — 少なくとも1単位の容量が利用可能になるまでの秒数を返します(現在許可されている場合は0)。 クライアントごとの設定を受け取るコンストラクタ: rate(単位/秒)、burst(蓄えられる最大単位)、およびスライディングウィンドウ会計のためのオプションである window_seconds。 Algorithm: トークンバケット(バースト許容のため)と スライディングウィンドウ(ログまたはカウンタ)(window_seconds 内で許可される総リクエストを上限するため。純粋なトークンバケットではリフィル後に持続的な乱用を許してしまう)を組み合わせたハイブリッドを実装してください。リクエストは両方のチェックが通った場合にのみ許可されます。スライディングウィンドウのデータ構造選択(正確なログ vs. 重み付き二窓近似)について正当化し、メモリ/精度のトレードオフを短いコメントブロックまたは付随するノートで議論してください。 Concurrency: リミッタは同一および異なる client_id に対して多くのスレッド/ゴルーチンから同時に呼ばれます。単一のグローバルロックがボトルネックにならないようにしてください(例:クライアント毎のロック、ロックストライピングなど)。同時実行の allow 呼び出しの下であなたのアプローチが正しい理由(トークンの二重消費が起きない、更新の取りこぼしがない)を文書化してください。 Time source: テストが決定論的になるようにクロックを注入可能にしてください。デフォルトではモノトニッククロックを使用してください。 Edge cases to handle explicitly: cost が burst より大きい場合(拒否すること、永遠にブロックしないこと)。 クロックの巻き戻しや長時間の一時停止(例:サスペンドされたVM):クラッシュさせずにクランプ(調整)し、無制限のトークンを付与しないこと。 新規クライアントの最初のリクエスト(遅延初期化)。 ステールなクライアントのクリーンアップ(クライアントが停止してもメモリが無制限に成長しないこと)。 小数トークン/サブミリ秒の時間処理。 Tests: 注入可能なクロックを使用して、少なくとも6つの単体テストを提供してください。対象は:基本的な許可/拒否、バーストの枯渇とリフィル、バケットのリフィルとは独立したスライディングウィンドウ上限、cost > burst、1クライアントへの同時競合(決定論的特性:ある期間 T 秒内に許可される合計 ≤ rate*T + burst)、およびステールクライアントの除去を含みます。 Complexity: allow の償却時間計算量とクライアントあたりのメモリ計算量を明示してください。 Deliver: 完全な実行可能コード(単一ファイルで可、ただしファイルを分ける場合は明確にラベル付けしてください)、テスト、および設計ノート(最大約250語)を提出してください。

467
2026/05/12 09:45

プログラミング

Anthropic Claude Opus 4.7 VS OpenAI GPT-5.4

MarkdownサブセットをHTMLに変換するコンバータ

Python関数 markdown_to_html(markdown_text: str) -> str を実装してください。この関数は、特定のサブセットのMarkdownを含む文字列を対応するHTML表現に変換します。 関数は次の機能をサポートする必要があります: ブロック要素: 見出し(Headers): # から ###### で始まる行はそれぞれ <h1> から <h6> タグに変換すること。 順不同リスト(Unordered Lists): - で始まる行は <ul> と <li> タグに変換すること。レベルごとに2つのスペースでインデントされたネストされたリストをサポートすること。リストは空行または別のブロック要素によって終了する。 コードブロック(Code Blocks): 三連バックティック()で囲まれた内容は `<pre><code>...</code></pre>` に変換すること。開始バックティック上の言語指定(例:python)は無視すること。コードブロック内部では他のMarkdown処理は行わないこと。 段落(Paragraphs): その他のテキストはすべて <p> タグで囲むこと。連続するテキスト行は同じ段落に属する。段落は1行以上の空行で区切られる。 インライン要素: 太字かつ斜体(Bold & Italic): ***text*** は <strong><em>text</em></strong> に変換すること。 太字(Bold): **text** は <strong>text</strong> に変換すること。 斜体(Italic): *text* は <em>text</em> に変換すること。 ルールと制約: インライン要素は見出しやリスト項目内でネストできる。 パーサーは未終了のインラインタグなどの壊れたまたはトリッキーな入力に対して頑健であるべきである。例えば、*italic は <p>*italic</p> としてレンダリングされるべきである。 インライン要素の優先順位は *** が最優先、次に **、最後に * とする。 入力は単一の複数行文字列であると想定する。 リンク、画像、引用(blockquote)、番号付きリストなど、ここに明記されていない他のMarkdown機能は実装しないこと。 出力されるHTMLは完全なドキュメントである必要はない(<html> や <body> タグは不要)。 Example Input: # 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
2026/04/22 09:40

プログラミング

Anthropic Claude Sonnet 4.6 VS OpenAI GPT-5.4

Pythonでスレッドセーフなトークンバケットレートリミッタを実装する

TokenBucketRateLimiter という名前のPythonクラスを書いてください。このクラスはレート制限のためのトークンバケットアルゴリズムを実装します。実装はスレッドセーフであり、状態管理のために外部ライブラリ(たとえば Redis)の使用は避けてください。 クラスは次の仕様を満たす必要があります。 __init__(self, capacity, refill_rate) メソッド: capacity: バケットが保持できるトークンの最大数。 refill_rate: 1秒あたりにバケットに追加されるトークンの数。 consume(self, tokens) メソッド: このメソッドはバケットから指定された数の tokens を消費しようとします。 トークンを正常に消費できた場合は True を返し、そうでなければ False を返すべきです。 消費を試みる前に、最後の呼び出しから経過した時間に基づいてバケットがトークンで補充される必要があります。 スレッドセーフ性: このクラスは複数の同時実行スレッドから安全に使用できなければなりません。バケットの状態を変更するすべての操作(トークンの補充や消費など)は原子的である必要があります。 必要なインポートを含めた完全なクラス実装を提供してください。

556
2026/04/16 09:37

プログラミング

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.4

コマンドライン ファイル同期ツール

Python スクリプトを作成してください。コマンドライン用のファイル同期ツールです。 スクリプトは次の3つのコマンドライン引数を受け取る必要があります: source_path: ソースディレクトリへのパス。 replica_path: 同期されるレプリカディレクトリへのパス。 log_file_path: すべての操作が記録されるファイルへのパス。 コア機能: 一方向同期: ツールは一方向の同期を行い、replica_path ディレクトリを source_path ディレクトリの正確なコピーにします。 ソースに存在しレプリカに存在しないファイルおよびディレクトリはレプリカにコピーされなければなりません。 レプリカに存在しソースに存在しないファイルおよびディレクトリはレプリカから削除されなければなりません。 両方に存在するが内容が異なるファイルはレプリカで更新されなければなりません(ソースのバージョンがレプリカのバージョンを上書きします)。 変更検出: ファイルの更新が必要かどうかを判断するために、ファイル内容の MD5 ハッシュを使用してください。更新時刻には依存しないでください。 ログ記録: すべてのファイル操作(例: "COPY file.txt", "REMOVE old_dir", "UPDATE changed.log")をコンソールと指定されたログファイルの両方に記録してください。各ログエントリにはタイムスタンプを付けてください。 実行: スクリプトは同期操作を一度だけ実行して終了するようにしてください。ループで実行してはいけません。 要件: Python 3 を使用すること。 コマンドライン引数の解析には argparse ライブラリを使用すること。 解決策はネストされたディレクトリ、空のディレクトリ、およびさまざまなサイズのファイルを正しく扱う必要があります。 スクリプトは単一の、自己完結型のファイルであること。

573
2026/04/09 09:38

プログラミング

Google Gemini 2.5 Flash VS OpenAI GPT-5.4

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

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

595
2026/03/23 17:47

プログラミング

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.2

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

Python関数 parse_log(log_content: str) -> list を作成してください。この関数はカスタム形式のログファイルを解析します。関数はログ内容を単一の複数行文字列として受け取り、各辞書が正常に完了したトランザクションを表す辞書のリストを返す必要があります。 ログ形式のルール: START <transaction_id> <timestamp>: トランザクションの開始を示します。transaction_id は空白を含まない文字列です。timestamp は ISO 8601 形式の文字列です。 END <transaction_id> <status> <timestamp>: トランザクションの終了を示します。transaction_id は開いているトランザクションと一致しなければなりません。status は単語1つ(例: SUCCESS, FAIL)です。 EVENT <key1>=<value1> <key2>="<value with spaces>" ...: 現在アクティブなトランザクション内のイベントを表します。1つ以上のキーと値のペアで構成されます。空白を含む値は二重引用符で囲まれている必要があります。 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 行は新しいトランザクションを開始します。 ログファイルの終わりでまだ開いているトランザクションも「破棄」され、最終出力に含めないでください。

572
2026/03/23 08:42

プログラミング

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

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

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

616
2026/03/21 08:40

プログラミング

Google Gemini 2.5 Pro VS OpenAI GPT-5.2

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

Pythonで、次の機能をサポートするスレッドセーフなレートリミッタを設計・実装してください。 スライディングウィンドウによるレート制限: 固定時間ウィンドウを使うのではなく、真のスライディングウィンドウアルゴリズムを実装してください。各クライアント(文字列キーで識別)は、任意の連続する window_seconds 秒の間に最大で max_requests 件のリクエストを許容されます。 優先度レベル: 各リクエストには優先度レベル(整数 1-5、1 が最も高い優先度)が付与されます。クライアントのレート上限に達した場合、低優先度(数値が大きい)なリクエストが優先的に拒否されるべきです。具体的には、優先度 P の新しいリクエストが到着しウィンドウが満杯である場合、リミッタは現在のウィンドウ内に P より厳密に低い優先度(すなわち数値が P より大きい)を持つリクエストが存在するかを確認します。存在する場合は、最も低優先度(数値が最大)のリクエストのスロットを「取り上げ(revoked)」て、新しい高優先度リクエストを受け入れます。取り上げられたリクエストは報告できるよう記録されるべきです。取り上げ可能な低優先度のリクエストが存在しない場合は、新しいリクエストは拒否されます。 バースト許容: 各クライアントはオプションで burst(デフォルトは 0)というバースト許容量を持てます。これはウィンドウ内で max_requests に加えて最大 burst 件まで追加のリクエストを許容します。ただし、これはクライアントの現在のウィンドウにおける最初のリクエストから半分以上のウィンドウ時間が経過している場合に限ります。 スレッドセーフ: レートリミッタは複数のスレッドから同時に使用しても安全でなければなりません。これをテストシナリオで実証してください。 統計: リミッタはクライアントごとの統計を追跡する必要があります: 許可された(admitted)合計リクエスト数、拒否された(rejected)合計、取り上げられた(revoked、より高優先度のリクエストにより追い出された)合計、現在のウィンドウ利用率(0.0〜1.0 の浮動小数点)を追跡してください。 次のインターフェースを実装してください: 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 に対する統計問い合わせ

617
2026/03/19 14:46

プログラミング

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5.2

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

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

578
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 つのファイルに含めてください。一般的なプログラミング言語であればどれを使用してもかまいませんが、コードは完全であり、書かれたとおりに実行可能でなければなりません。

613
2026/03/18 22:33

プログラミング

Google Gemini 2.5 Flash VS OpenAI GPT-5.2

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

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

600 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:' です。 あなたの関数は次のことを行う必要があります: 入力文字列を解析して依存関係グラフを構築する。 target_package が与えられたとき、そのすべての依存関係(推移的依存関係を含む)を見つける。 インストール順序を表す文字列の単一のリストを返す。このリストはトポロジカルソートされていなければならない(依存先は、それに依存するパッケージより常に前に現れなければならない)。target_package 自体はリストの最後の項目でなければならない。リストには重複を含めてはならない。 循環依存を検出する。循環が見つかった場合は、循環を明確に示すメッセージ付きで ValueError を送出すること(例: 'Circular dependency detected involving: A -> B -> A')。 不足しているパッケージを検出する。あるパッケージが package_definitions 内で定義されていない依存関係を列挙している場合は、'Missing package definition for: C' のようなメッセージ付きで ValueError を送出すること。

644
2026/03/18 20:21

1〜20件を表示 / 全26件

関連リンク

X f L