Câu trả lời:
Ngôn ngữ truy vấn cờ vua làm điều này rất tốt. Tệp .cql ngắn sau đây hoạt động giống như một cơ duyên để tìm tất cả các trò chơi trong input.pgn trong đó một bên đang trao đổi (trong khi cho phép chênh lệch số lượng cầm đồ cho mỗi bên) cho 4 lần di chuyển thẳng (được chọn để cai trị giả sử, các tình huống trong đó một chuỗi giao dịch bằng nhau xảy ra bắt đầu bằng việc một tay đua lấy một phần nhỏ hoặc các sự hy sinh giả tạm thời như vậy).
(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
)
)
Giá trị điểm tiêu chuẩn cho các mảnh được sử dụng, do đó, :powerdifference [Rr] -5 -5
điều kiện có nghĩa là Đen có thêm một điểm mới hơn Trắng, trong khi :powerdifference [BbNn] 3 3
đảm bảo rằng Trắng có chính xác một mảnh nhỏ hơn Đen. Các :flipcolor
cuối cùng thực hiện việc tìm kiếm cùng với vai trò đảo ngược. Theo mặc định, CQL chèn một nhận xét "MATCH" trong các trò chơi của output.pgn kết quả tại các vị trí đảm bảo sự bao gồm của chúng, vì vậy bạn có thể nhanh chóng xác định vị trí trao đổi túi.