Home > Software engineering >  How do I generate pseudo random array?
How do I generate pseudo random array?

Time:01-20

I need to generate array from letters A,H,O,J and numbers 0-9. I want to generate letters into new array in order AHOJ. The individual characters can appear elsewhere in new array but always in AHOJ order and they dont need to follow each other. Remaining indexes of new array will be filled with digits. Examples - A123H85O2J3, AHOJ9854273, 012AH851OJ3 and so on. The order of AHOJ must not be randomized within new array. I have this code, but is probably completly wrong. It only works as expected when condition equal to 7 is met.

let letters = ['A','H','O','J'];
let newArray =new Array(11);
let lastIndex = 10;

for (let i = 0; i < letters.length; i  ) {
    
    newIndex = Math.floor(Math.random() * lastIndex);
    console.log(newIndex);
    if (newIndex == 7) {
        for (let j = 0; j < letters.length; j  ) {

            newArray.splice(j   7,1,letters[j]);
        }
        for ( let k = 0; k < 7; k  ) {
            newArray.splice(k,1,Math.floor(Math.random() * 10).toString());
        }
        break;
    }
    else if (newIndex > 7) {
        lastIndex = Math.floor(Math.random() * 6);
        newArray.splice(lastIndex,1,letters[i]);
    }
    else {
        newArray.splice(newIndex,1,letters[i]);
        
    }



    
    console.log(letters[i]);
}

console.log(newArray);

CodePudding user response:

for (let i = 0; i < 100; i  = 1) {
  console.log(generate('AHOJ', 11))
}

function generate(word, length) {
  // create array [0, 1, 2, ..., length - 1]
  const indexes = [...Array(length).keys()]
  // get unique random indexes for each character of the word
  const reserved = [...word].map(() => {
    // random index of indexes array
    const index = Math.floor(Math.random() * indexes.length)
    // remove the number at index from indexes array
    const res = indexes.splice(index, 1)
    // return removed number
    return res[0]
  })
  
  const result = []

  for (let i = 0, w = 0; i < length; i  = 1) {
    // if index is reserved, push a letter from word
    if (reserved.includes(i)) {
      result.push(word[w])
      w  = 1
    // push random digit otherwise
    } else {
      result.push(Math.floor(Math.random() * 9))
    }
  }
  
  return result.join('')
}

  • Related