Trying to strike a balance between raw enumerations of all valid states and practicality:
Rooks and Knights are identical, so their positions fall into [64 choose 2] states + 1 state for when both are captured (only one can occupy the King's location) + 3 states for when both are in the starting position and castling is available for one or the other or both
2020 states = 11 bits * 2 colors * 2 piece types = 44 bits
Bishops only occupy half the board (32 states) + 1 state to track captures 33 states ^ (4 unique pieces) = 21 bits
Queens and Kings just store their location 64 states = 6 bits * 4 pieces = 24 bits
Pawn promotions uses the same method as the article 9 bits x 2 colors = 18 bits
En passant can be stored by the column + 1 state for none 9 states = 4 bits
Pawns can be in, uh, [64 choose 8] position states. (It's only 4 billionish) [64 choose 8] states = 32 bits * 2 colors = 64 bits
And captured pawns can be 'unpromoted' and placed on an empty spot in the top row since unpromoted pawns will never be there.And 1 bit for whose turn it is
1 bit
Total = 176 bits or 22 bytesStarted out thinking about ways to use more of the duplicate pieces, rediscovered the idea of ranking and unranking, started to understand what the person with a limit of 19.2 bytes was doing, tried out just treating position state as [64 choose 32] and only got to 194 bits, then finally worked through this approach.