我得到了一个充满一些字母的数组。请参见下面的示例。
首先,我想让阵列变得混乱。好吧,我发现了最著名的改组器,称为Fisher-Yates改组器。
现在我想在输出时例如F2不应紧邻F或F'。
其他也一样。 D不应靠近D2或D'。
它应该输出例如:
R B2 U F L F D2 ....依此类推。
而不是:R B2 B'L F D2 ...
有什么帮助,建议吗?我知道我应该使用charAt()
检查第一个字符,但是我不是该函数的专家。
Java脚本
function shuffle(sides) {
var elementsRemaining = sides.length, temp, randomIndex, last;
while (elementsRemaining > 1) {
randomIndex = Math.floor(Math.random() * elementsRemaining--);
if (randomIndex != elementsRemaining) {
temp = sides[elementsRemaining];
sides[elementsRemaining] = sides[randomIndex];
sides[randomIndex] = temp;
}
};
}
return sides;
}
var sides = ["F ", "R ", "U ", "L ", "D ", "F2 ", "R2 ", "U2 ", "L2 ", "D2 ", "F' ", "R' ", "U' ", "L' ", "D' "];
shuffle(sides);
$('#scramble').html(sides);
最佳答案
您可以随机播放,检查约束,如果不满足约束,请重复。您检查约束的方法可以是
var passesConstraint = function(sides) {
for(var i = 0; i < sides.length - 1; i++) {
if (sides[i][0] === sides[i+1][0]) {
return false;
}
}
return true;
}
您无需执行charAt(),字符串也可以通过[]表示法进行访问。
shuffle(sides)
while (!passesConstraint(sides)) {
shuffle(sides)
}