ES6(Javascript)、 71、69バイト
入力と出力は配列であり、「==」と比較できる限り、任意の要素タイプ(文字列、数値など)で動作する必要があります。
ゴルフ
F=s=>(r=[...s]).sort(_=>Math.random()-.5).some((e,i)=>s[i]==e)?F(s):r
テスト
F=s=>(r=[...s]).sort(_=>Math.random()-.5).some((e,i)=>s[i]==e)?F(s):r
F(['A','B','C','D'])
Array [ "D", "C", "A", "B" ]
F(['A','B','C','D'])
Array [ "D", "A", "B", "C" ]
F(['A','B','C','D'])
Array [ "C", "D", "B", "A" ]
F(['A','B','C','D'])
Array [ "D", "C", "B", "A" ]
F(['A','B','C','D'])
Array [ "C", "D", "B", "A" ]
インタラクティブなスニペット
F=s=>(r=[...s]).sort(_=>Math.random()-.5).some((e,i)=>s[i]==e)?F(s):r
function G() {
console.log(F(T.value.split``).join``);
}
<input id=T value="ABCDEF"><button id=G onclick="G()">GENERATE</button>