bristol-universal.cql
; bristol-universal.cql can be downloaded
here.
; Find all Bristols orthogonal or diagonal.
; Here a front line piece ($front)
; moves to a destination.
; Later, along the same line, a back line piece ($front) follows the
; path of $front, crossing the same squares it does, and landing
; just behind it.
;
; The results are sorted by the length of the move
; by $back (which must traverse at least 3 squares to be
; included).
cql(input heijden.pgn)
; Step 1: choose our front piece and our back piece
piece $front in [QRB]
piece $back in [QRB]
; Step 2: start the maneuver, which will check four positions
next(
; Position (1) the $front moves.
move from $front
; Position (2) verify, that after $front moves it hasn't given check
; since those are unthematic
not check
; Position(s) (3) we just let the $front sit where it is not moving, for any
; number of moves, giving $back time to maneuver into position
{not move from $front} *
; Position (4) we are ready for the thematic position. We check 3 things about it:
; (4a) There must be a ray between $back and $front, with all the
; squares between the current position of $front
; and the original position of $front on that ray.
{ray attack ($back
between (origin $front
$front)
$front)
; (4b) Now we check that $back moves along the ray, to within 1 square of $front
move from $back to anydirection 1 $front
; (4c) Finally, we sort the result by the distance between $back and $front.
; This is done by counting the squares between them
sort "distance"
countsquares 3 7
between ($back
$front)
} ; end thematic position
) ; end next