2 votes

Comment générer un tableau de nombres aléatoires fluctuant par 1 en javascript ?

Je souhaite pouvoir générer le tableau suivant (ou quelque chose d'approchant) en javascript :

[
  52, // random number 0-100
  53, // random +1 or -1
  54, // random +1 or -1
  53, // random +1 or -1
  52, // random +1 or -1
  53, // random +1 or -1
  52, // random +1 or -1
  51, // random +1 or -1
  50, // random +1 or -1
  51, // random +1 or -1
  // etc., etc., etc.
]

Comment puis-je faire cela ?

J'ai essayé, mais j'obtiens toujours un nombre aléatoire suivi de 1 et de -1 uniquement :

Array(50).fill(0).map((v, i, a) => i !== 0 ? (Math.round(Math.random()) ? a[i-1] + 1 : a[i-1] - 1) : Math.floor(Math.random() * 101))

2voto

Alan Omar Points 1810

Ceci pourrait vous aider :

function randomGenerator(size) {
    let result = [];
    let firstValue = Math.round(Math.random() * 100);
    result.push(firstValue);

    for (let i=0;i<size-1;i++){
        firstValue += Math.random() > 0.5 ? 1:-1;
        result.push(firstValue)
    }
    return result;
}

console.log(randomGenerator(10));
console.log(randomGenerator(13));

ou, si vous préférez une approche fonctionnelle, vous pouvez tirer parti des valeurs par défaut et opérateur virgule :

const randGenerator = (size = 13,init = Math.round(Math.random() *100)) => 
Array(size).fill(0).map(e => (init += Math.random() > 0.5 ? 1:-1,init))

console.log(randGenerator(10))
console.log(randGenerator(13))

0voto

MrCoconut Points 682

La solution est simple :

function rand(min, max) {
  return min + Math.floor((max + 1 - min) * Math.random())
}

function generate(size) {
  let last = rand(0, 100)
  const array = []
  for (let i = 0; i < size; i++) {
    array.push(last)
    last += rand(0, 1) ? 1 : - 1
  }
  return array
}

console.dir(generate(50))

0voto

hamid niakan Points 875

Voici comment vous pouvez le faire avec une fonction récursive, vous pouvez définir le min et le max initial pour le nombre aléatoire et également spécifier la longueur finale du tableau :

const arr = [];

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1) + min);
}

function updateArr(min, max, arrLength, arr) {
  if (arrLength) {
    let resultNum = getRandomInt(min, max);
    if (resultNum !== arr[arr.length - 1]) {
      arr.push(resultNum);
      updateArr(resultNum - 1, resultNum + 1, arrLength - 1, arr);
    } else updateArr(min, max, arrLength, arr);
  }
}

updateArr(0, 100, 10, arr);

console.log(arr);

-1voto

oded bartov Points 191
arr = [Math.random()*100]
for (let i = 0; i < 49; i++){
arr.push(arr[i] + (Math.random() > 0.5? 1 : -1))
}

Cela vous convient-il ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X