Pro heslo délky n, k povinných (disjunktních) skupin znaků:
n-k krát vyber náhodný znak ze sjednocení skupin, lep je za sebe do stringu
Pro každou skupinu vyber náhodného zástupce a dej ho na náhodné místo v řetězci. (Případně dávej na konec a na konci proveď shuffle.)
Není to dokonalé, ale je to na pár řádků (v rozumném programovacím jazyce, v shellu by to byl opruz) a není problém to udělat pro daný seed a offset deterministické.