Como calcular a classificação lexicográfica de uma determinada permutação

Por exemplo, existem 6 cadeiras na sala e 4 meninas e 2 meninos. Existem 15 maneiras possíveis possíveis de se sentar nessas cadeiras6!/(4!*2!)=15.

Meu problema é encontrar uma maneira eficiente de calcular a posição da possibilidade que eles escolhem para sentar. Por posição, quero dizer o seguinte:

BBGGGG - possible position #1
BGBGGG - possible position #2
BGGBGG - possible position #3
BGGGBG - possible position #4
BGGGGB - possible position #5
GBBGGG - possible position #6
GBGBGG - possible position #7
GBGGBG - possible position #8
GBGGGB - possible position #9
GGBBGG - possible position #10
GGBGBG - possible position #11
GGBGGB - possible position #12
GGGBBG - possible position #13
GGGBGB - possible position #14
GGGGBB - possible position #15

Por exemplo, eles escolhem a posiçãoGBBGGG... Por enquanto, minha solução para calcular o número dessa posição (nº 6) é fazer um loop em todas as posições possíveis e comparar cada uma delas com a ordem selecionada e retornar o número da posição atual, se forem iguais.

Nesse intervalo do exemplo acima, não é grande coisa fazer um loop em 15 combinações possíveis, mas se você aumentar o número de cadeiras e pessoas, esse método está longe de ser eficiente.

Existe alguma fórmula ou maneira mais eficiente que eu possa usar para determinar a posição da possibilidade selecionada? Sinta-se livre para usar qualquer linguagem de programação em seus exemplos.

ATUALIZAR: Eu sei exatamente quantas cadeiras, meninos e meninas estão na sala. O único problema é encontrar o número de posição da possibilidade que eles escolhem para sentar.

A classificação que estou usando no meu exemplo é apenas para melhor legibilidade. Respostas com qualquer tipo de classificação são bem-vindas.

questionAnswers(5)

yourAnswerToTheQuestion