Question: I am wanting to write a chess engine (see here: [Creating chess engine, machine learning vs. traditional engine?](https://chess.stackexchange.com/questions/26489/creating-chess-engine-machine-learning-vs-traditional-engine)). The first step I am doing is taking a position in as an FEN and converting this position into an ideal move. Pseudocode would look something like this:

`Position → Move`

or using notation:

`rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 → e4`

I am trying to create an enumeration of every possible chess move, and I feel that I may be missing some. This includes moves like "e4", "Nxf5", "Bg3+", "Qxh4#", "exf8N#". My total count of unique moves that can be expressed using algebraic notation is **1884**. Can anybody confirm the total number of unique moves that can be expressed using algebraic notation? My full list of moves can be found here: <https://pastebin.com/xDNqbFt2>

Answer: 
I immediately notice that you've missed the castling moves (O-O and O-O-O).

I would list the pawn-promoting moves according to their PGN syntax (=Q/R/N/B suffix), as that's the most commonly used in computer chess.

Algebraic notation can be ambiguous for sliding and leaping pieces (everything except pawn and king, actually) which may require specifying the origin rank, file, or both. The latter is only needed for queens, bishops and knights, as rooks are always disambiguated by one or the other.

It might be useful to treat the suffix codes indicating whether the move results in check or checkmate as orthogonal to the move itself, since pretty much any move can theoretically have those results. This would effectively divide the number of unique moves you need to handle by three. Conversely, the different promotions of a pawn definitely should be considered as unique moves.
You've got a big list, but you forgot disambiguate moves. N1f3, N1f3+, N1f3#, Qd6d4...

If you want to include all possible Algebraic moves, you need to increase your list at least tenfold.