0

私はルービック キューブ タイマーの Web サイトに取り組んでおり、スクランブリング アルゴリズムを作成する必要があります。スクランブリング アルゴリズムがどのように機能するかについて説明します。各面には独自の文字があり、それはイニシャルです。例えば正面を動かしたい場合は「F」と書きます。右の面を動かしたい場合は、「 R 」などと書きます。ダウンに関しては、底面が D であることに注意してください。DURLB F です。その文字の後に何もない場合は、時計回りに回します。アポストロフィ「 ' 」がある場合は、反時計回りに回します。2 がある場合は、2 回まわします。問題は、2 つの同じ文字を隣り合わせにすることはできないということです (たとえば、「.. U U' ...」は何もしないのと同じです。これまでのところ、私はこれを自分で処理しましたアルゴリズム. 問題は、文字が 1 つの場合に発生します。次に再び最初の文字 (たとえば、「.. UD U'...」(時計回りに上、時計回りに下、反時計回りに上))。これらをチェックして自動的に回避する方法がわかりません。コードは次のとおりです。

<div id=“Scramble”&gt;</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>
4

1 に答える 1