0

我得到了一个充满一些字母的数组。请参见下面的示例。 首先,我希望数组被洗牌。好吧,我找到了最著名的 shuffle,称为Fisher-Yates shuffle。

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

它应该输出例如:R B2 UFLF D2 ....等等。

而不是: R B2 B' LF 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);
4

1 回答 1

3

您可以随机播放、检查您的约束并在不满足约束时重复。您检查约束的方法可以是

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)
}
于 2014-10-08T19:18:35.777 回答