回答:
Chess Query Languageはこれを非常にうまく行います。次の短い.cqlファイルはチャームのように機能し、input.pgnですべてのゲームを検索します。このゲームでは、片方が交換(両サイドのポーンの数に差がある)で、4つの直線移動を行います(ルールに従って選択)アウト、たとえば、一連の取引が偶然にルークがマイナーな駒を取っている、または他のそのような一時的な疑似犠牲で始まる状況)
(match
:pgn input.pgn
:output output.pgn
(position
:sequence(
(position :powerdifference [Rr] -5 -5 :powerdifference [Qq] 0 0 :powerdifference [BbNn] 3 3)
(position :powerdifference [Rr] -5 -5 :powerdifference [Qq] 0 0 :powerdifference [BbNn] 3 3)
(position :powerdifference [Rr] -5 -5 :powerdifference [Qq] 0 0 :powerdifference [BbNn] 3 3)
(position :powerdifference [Rr] -5 -5 :powerdifference [Qq] 0 0 :powerdifference [BbNn] 3 3)
)
:flipcolor
)
)
ピースには標準のポイント値が使用されるため、:powerdifference [Rr] -5 -5
条件は、ブラックがホワイトよりもルークが1つ多いことを意味し:powerdifference [BbNn] 3 3
、ホワイトはブラックよりもマイナーなピースが1つ多いことを保証します。:flipcolor
最後には逆の役割と同じ検索を行います。デフォルトでは、CQLは、結果のoutput.pgnのゲームに含めることを保証する位置に「MATCH」コメントを挿入するので、交換袋をすばやく見つけることができます。