请帮忙。我对这些事情还很陌生,因此我面临提出解决方案的挑战。
我需要一个JavaScript代码,该代码可以帮助我自动选择具有3种可能结果(例如足球-主队,平局或客队获胜)的随机结果。总共有10个事件。必须一次从每个事件中得出一个结果(可能是主胜(a),平局(b)或AwayWin(c)),并且必须为10个事件随机选择结果或结果,直到没有其他可能性为止。我试图在JavaScript中使用递归和不同类型的字符串置换方法,但是我没有得到。
我想要的内容的描述可以从上面的链接中查看。
谢谢。
我想要的插图:
最佳答案
这应该做。我认为这些评论很明确,但请告诉我是否需要解释。您还可以设置不同数量的事件和结果数组。
// number of events (length of sequence)
const numEvents = 10;
// possible outcomes
const outcomes = ['a', 'b', 'c'];
// total number of possible permutations
// (number of outcomes to the power of number of events)
const numPermutations = outcomes.length**numEvents;
// permutations indices [0, 1, .., numPermutations - 1]
let permutations = Array(numPermutations).fill(0).map((v, i) => i)
// convert sequence of digits to sequence of outcomes ('012' -> 'a b c')
function sequenceToChars(sequence) {
return Array.from(sequence).map(i => outcomes[i]).join(' ');
}
// convert permutation index to an outcome sequence (2 -> 'a a c')
function permutationToSequence(permutation) {
// get the sequence as a number in base of number of outcomes
const sequence = permutation.toString(outcomes.length).padStart(numEvents, '0')
return sequenceToChars(sequence)
}
// pick a permutation randomly until no permutations left
for (let i = 0; i < numPermutations; i++) {
// choose a random index of permutations left
const rand_idx = Math.floor(Math.random() * permutations.length)
// remove and return chosen index
permutation = permutations.splice(rand_idx, 1)[0]
// convert permutation index to sequence
const sequence = permutationToSequence(permutation)
console.log(sequence)
}