javascript - 魔方的随机移动 javascript 扰码器

标签 javascript algorithm rubiks-cube

我目前正在研究网络计时器,但我的加扰算法存在一些问题。由于是第一个版本,我只希望扰码器是随机移动而不是随机状态,因为它制作起来太复杂了,并且会在以后的更新中出现。我有一个算法,基本上是从可能性中选择一系列随机移动,然后检查两个相同的字母(或移动)是否不相邻。一切正常,但我不知道如何添加可以避免以下情况的内容:例如“D U D”。两个相同的 Action 被另一个 Action 分开是可以接受的例如“D R D”,但不是“D U D”,因为它等于“D2 U”,因此是浪费的 Action 。

来自非 cubers 的信息:

每个字母代表它在阅读字母时被感动的脸。例如:“L U L”:“L”表示将左面顺时针旋转一次,然后“U”表示顺时针旋转上表面,最后再次“L”表示再次旋转左面。 如果一个字母后跟一个撇号,则表示该面应逆时针旋转。如果后面跟着一个“2”,则表示要将脸连续旋转两次。 L左R右F前B后D下U上

代码如下:

		function generate_scramble() {
			var scramble_length = 20;
			var scramble = new Array();

			var possible_letters = new Array(" D", " U", " B", " F", " R", " L");
			var possible_switches = new Array("", "2", "'");

			var array_of_randoms = new Array();

			for (var i = 0; i < scramble_length; i++) {
				var random_letters = Math.floor(Math.random() * possible_letters.length);
				var random_switches = Math.floor(Math.random() * possible_switches.length);

				array_of_randoms.push(random_letters);

				if (array_of_randoms[array_of_randoms.length - 1] == array_of_randoms[array_of_randoms.length - 2]) {
					if (array_of_randoms[array_of_randoms.length - 1]  < 5) {
						array_of_randoms[array_of_randoms.length - 1]++;
					} else {	
						array_of_randoms[array_of_randoms.length - 1]--;
					}
				}
			random_letters = array_of_randoms[array_of_randoms.length - 1];
			scramble.push(possible_letters[random_letters] + possible_switches[random_switches])
			}
			document.getElementById("scramble").innerHTML = "Scramble: " + scramble.join("");
		}

		generate_scramble();
	<p id="scramble">
		Scramble: 
	</p>
	<button onclick="generate_scramble()">
		New Scramble
	</button>

最佳答案

 const directions = [
   ["D", "U"],
   ["L","R"],
   ["F","B"]
 ];

 const times = ["", "'", "2"];

 const random = (array, exclude) => {
   do {
      var n = Math.floor( Math.random() * array.length );
   } while(array[n] === exclude)
   return array[n];
}

const scramble = new Array(20);
var direction;
for(var i = 0; i < scramble.length; i++){
  direction = random(directions, direction);
  scramble[i] = random(direction) + random(times);
 }

您可以通过始终改变它移动的方向来减少许多错误移动。所以 D U D 不会出现,因为 D 和 U 走同一个方向。

关于javascript - 魔方的随机移动 javascript 扰码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47733159/

相关文章:

javascript - 我如何从 csv 中读取数据,而不是准备好的数据?

javascript - jQuery Mobile - 移至下一页/上一页 - 单击后执行操作两次

algorithm - 使用发射器和接收器跟踪框架内的多点触控运动

algorithm - 最近的一对点 平面情况

python - 如何仅通过相互比较来对图像进行排名?

javascript - 我如何保证我的魔方置乱算法不会连续两次选择相同的方向?

javascript - 无法使用 ant 和闭包编译器编译 javascript,因为 Jquery 的 $ 未声明

javascript - 更改全日历中的事件颜色

c++ - 摄像头和图像识别