私はルービック キューブ タイマーの Web サイトに取り組んでおり、スクランブリング アルゴリズムを作成する必要があります。スクランブリング アルゴリズムがどのように機能するかについて説明します。各面には独自の文字があり、それはイニシャルです。例えば正面を動かしたい場合は「F」と書きます。右の面を動かしたい場合は、「 R 」などと書きます。ダウンに関しては、底面が D であることに注意してください。DURLB F です。その文字の後に何もない場合は、時計回りに回します。アポストロフィ「 ' 」がある場合は、反時計回りに回します。2 がある場合は、2 回まわします。問題は、2 つの同じ文字を隣り合わせにすることはできないということです (たとえば、「.. U U' ...」は何もしないのと同じです。これまでのところ、私はこれを自分で処理しましたアルゴリズム. 問題は、文字が 1 つの場合に発生します。次に再び最初の文字 (たとえば、「.. UD U'...」(時計回りに上、時計回りに下、反時計回りに上))。これらをチェックして自動的に回避する方法がわかりません。コードは次のとおりです。
<div id=“Scramble”></div>
<script>
generateScramble();
function generateScramble() {
// Possible Letters
var array = new Array(" U", " D", " R", " L", " F", " B")
// Possible switches
var switches = ["", "\'", "2"];
var array2 = new Array(); // The Scramble.
var last = ''; // Last used letter
var random = 0;
for (var i = 0; i < 20; i++) {
// the following loop runs until the last one
// letter is another of the new one
do {
random = Math.floor(Math.random() * array.length);
} while (last == array[random])
// assigns the new one as the last one
last = array[random];
// the scramble item is the letter
// with (or without) a switch
var scrambleItem = array[random] + switches[parseInt(Math.random()*switches.length)];
array2.push(scrambleItem); // Get letters in random order in the array.
}
var scramble = "Scramble: ";
// Appends all scramble items to scramble variable
for(i=0; i<20; i++) {
scramble += array2[i];
}
document.getElementById("Scramble").innerHTML = scramble; // Display the scramble
}
</script>