queenpawnpinecho.cql
// Download queenpawnpinecho.cql// PGN output when run on sample.pgn
/********** Find positions where: in the variations black moves to pin a P by a q but in the mainline black cannot pin that pawn because the K - and only the K - has moved. The distance specification is used to guarantee that that variation and the mainline are not too 'nearby': at least one of them must be a distance of at least 4 from their latest common ancestor. This eliminates certain uninteresting expressions of the theme. ***********/ cql( input heijden.pgn variations) btm mainline q P PawnsBlackCouldPinInTheMainline= square z in P move legal from q to ray (K z _ ) echo(source target){ variation btm #[Aa]==source:#[Aa] K!=source:K ~(source&target)== K | source:K move primary from q pinnedpawn=?child:pin through P from q source: not move legal from q to ray(K pinnedpawn _) L=lca(source target) max(distance(source L) distance(target L))>=4 source:comment ("The black queen cannot pin the P on " pinnedpawn) child:comment("The black queen pins the P on " pinnedpawn) }