modelstalemate.cql
// Download modelstalemate.cql// PGN output when run on sample.pgn
/*Find black model stalemates, sorted by number of participating white pieces A model stalemate is a pure stalemate such that each non-king non-pawn white piece participates, either by attacking the kings field, by pinning a black piece, or by being pinned itself. We start by including the file purestalemate.cql */ cql (input hhdbvi.pgn) flipcolor{btm stalemate KingsField= . attackedby k SelfBlockers= a & KingsField PossibleFlightSquares= KingsField & [A_] square all FlightSquare in PossibleFlightSquares #A attacks FlightSquare==1 square all SelfBlocker in SelfBlockers & pin #A attacks SelfBlocker==1 square all SelfBlocker in SelfBlockers & ~pin not A attacks SelfBlocker //This ends the stuff copied from purestalemate.cql //Now we check each white piece participates //We save the set of participants so we can sort on their //number WhiteParticipants = pin through A | pin from A | A attacks KingsField //Now for model stalemate, we only consider [RBNQ] as participants: //For ideal stalemate, we will modify the next two lines: [RBNQ] in WhiteParticipants sort "Number of eligible participants: " [RBNQ] & WhiteParticipants }