code: func (_ AlgebraicNotation) Decode(pos *Position, s string) (*Move, error) {
  	s = removeSubstrings(s, "?", "!", "+", "#", "e.p.")
  	for _, m := range pos.ValidMoves() {
  		str := AlgebraicNotation{}.Encode(pos, m)
  		str = removeSubstrings(str, "?", "!", "+", "#", "e.p.")
  		if str == s {
  			return m, nil
  		}
  	}
  	return nil, fmt.Errorf("chess: could not decode algebraic notation %s for position %s", s, pos.String())
  }
docs: // Decode implements the Decoder interface.