Python 3.10, 82 bytes
lambda b,s:C[C.find(s[:-1])-1]+str(abs(9*b-int(s[-1]))) C="dQeKaQRbQNcQBfKBgKNhKR"
Testing out dictionary interleaving idea which is a little shorter than converting to ascii codes with chr
. "Q" and "K" have to come first, otherwise they will match for at "QR".
-4 bytes using find
instead of index
and a better rank calculation for white/black.