Случайно выбранные результаты событий - PullRequest
0 голосов
/ 28 декабря 2018

Пожалуйста, помогите.Я очень плохо знаком с этими вещами, и мне нужно найти решение.

Мне нужен код JavaScript, который поможет мне автоматически выбирать случайные результаты событий, которые имеют 3 возможных результата, таких как футбол - Дом,Ничья или победа в гостях.А всего 10 событий.Один результат должен выходить из каждого события за раз (это может быть Home Win (a), Draw (b) или AwayWin (c)), и результат или результат должны выбираться случайным образом для 10 событий, пока не будет других возможностей.,Я пытался использовать рекурсию и различные методы перестановки строк в JavaScript, но не получил этого.Описание того, что я хочу, можно посмотреть по ссылке выше.Спасибо.

Иллюстрация того, что я хочу: enter image description here

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Это должно сделать это.Я думаю, что комментарии ясны, но дайте мне знать, если это нужно объяснить.Вы также можете установить различное количество событий и массив результатов.

// 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)
}
0 голосов
/ 28 декабря 2018

Если вам не нужно для генерации всех возможных последовательностей, вы можете написать функцию генератора, которая может детерминистически генерировать любую отдельную последовательность.

Этот фрагмент кода JavaScript будет генерировать первые 10последовательности для футбольных игр.

Вы можете получить любой из них, сделав один звонок на footballGenerator()

// generates a generic sequence
function sequenceGenerator(index, length, radix) {
    return Array.from(
        (index % (length * radix))
            .toString(radix)
            .padStart(length, '0')
        ).map(n => parseInt(n))
}

// convert a generically generated sequence into a football season's outcomes
function footballGenerator(seed, seasonLength) {
    return sequenceGenerator(seed, seasonLength, 3).map(game => {
        if (game == 0) {
            return "Home"
        } else if (game == 1) {
            return "Draw"
        } else {
            return "Away"
        }
    })
}

// example usage of the `footballGenerator()` function
for (let i = 0; i < 10; i++) {
    console.log(footballGenerator(i, 10))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...