Cómo mezclar una lista de elementos pero también imponer algunas restricciones sobre cómo se ordenan

El truco está en la selección. Seleccione al azar, pero mantenga un historial de las dos últimas selecciones. Cuando las dos últimas categorías coincidan, elimine esa categoría de la “urna” que seleccionó. Dependiendo de la implementación, esto puede ser tan simple como tirar del elemento seleccionado al azar y, si coincide con los dos últimos, vuelva a colocarlo y vuelva a seleccionarlo.

Si no está utilizando el reemplazo, existe la posibilidad de un interbloqueo cerca del final del proceso de selección. Dado que tiene un pequeño conjunto de categorías y miembros y desea agotar por completo la información, me preocuparía aún más por esto. Estas restricciones limitantes me llevan a un proceso de selección más complejo en el que las extracciones son aleatorias, pero solo después de seleccionar una categoría aleatoriamente. Si aún llega al final con tres categorías idénticas, seleccione la primera entrada de una categoría diferente con la que intercambiar no lo hará entrar en el mismo problema.