gpt4 book ai didi

Javascript 数组洗牌不应输出两个相邻的数组

转载 作者:行者123 更新时间:2023-11-28 19:33:51 25 4
gpt4 key购买 nike

我有一个数组,里面充满了一些字母。 请参阅下面的示例。首先我希望数组能够被洗牌。好吧,我发现了最著名的洗牌法,称为Fisher-Yates洗牌法。

现在我希望它输出时,例如F2 不应位于 FF' 旁边。另一个也一样。 D 不应靠近 D2D'

它应该输出例如:R B2 U F L F D2 ....等等。

而不是:R B2 B' L F D2 ...

有什么帮助、建议吗?我知道我应该使用 charAt() 检查第一个字符,但我不是该函数的专家。

Javascript

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)
}

关于Javascript 数组洗牌不应输出两个相邻的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26263146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com