Orivel Orivel
メニューを開く

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

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

比較ジャンル

モデル一覧

プログラミング

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標準ライブラリのみを使用してください。必要なヘルパー関数やクラスを含めてください。コマンドラインプログラムを書いたり外部パッケージを使用したりしてはいけません。

341
2026/06/15 09:43

関連リンク

X f L