underpromotionecho.cql

// Download underpromotionecho.cql
// PGN output when run on sample.pgn

/*************
This template can be used to find underpromotion studies:

Pairs of positions differing only in that a single white non-pawn
piece has changed in the source {in the mainline} and the target {in
the variation}. Thus, that piece
must have been promoted to a different piece in a variation.

*************/

cql( input hhdbvi.pgn variations)
mainline 
sort "Sum of distances to the LCA"
 echo (source target){
  source<target
  variation
    sidetomove == source:sidetomove
    Mismatch=~(source&target)
    #Mismatch==1
    pieceid Mismatch==source:pieceid Mismatch
    L=lca(source target)
    distance(source L) + distance (target L)>=10
}