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