Ответы пользователя по тегу Алгоритмы
  • Как сделать алгоритм по подбору вариантов?

    MagnusDidNotBetray
    @MagnusDidNotBetray
    Самый елеустремленный человек
    Набросал что-то, разбирайтесь, если хотите:
    const array = ['a', 'b', 'c', 'd', 'e', '1', '2', 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'j'];
    
    const getRandowPairs = arr => {
      const sorted = [...new Set(arr)].sort((a, b) => Math.round(Math.random()) || -1);
      let res = [];
      for (let i = 0; i + 1 < sorted.length; i += 2){
        res.push([sorted[i], sorted[i + 1]]);
      }
      return res;
    };
    
    const getRandomArr = arr => {
      const index = Math.floor(Math.random() * arr.length);
      const item = arr[index];
      arr.splice(index, 1);
      arr = arr.flatMap(e => e);
      const set = new Set();
      while (set.size < 5){
        let i = Math.floor(Math.random() * arr.length);
        if (!item.includes(arr[i])){
          set.add(arr[i]);
        }
      }
      return [item[1], ...set];
    };
    
    console.log(getRandomArr(getRandowPairs(array))); // [ "c", "e", "h", "a", "1", "2" ]
    console.log(getRandomArr(getRandowPairs(array))); // [ "1", "a", "d", "f", "h", "c" ]
    console.log(getRandomArr(getRandowPairs(array))); // [ "f", "b", "j", "g", "a", "2" ]


    Судя по последнему комментарию автора, нужно так:
    const array = ['a', 'b', 'c', 'd', 'e', '1', '2', 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'j'];
    
    const getRandowPair = arr => {
      const sorted = [...new Set(arr)].sort((a, b) => Math.round(Math.random()) || -1);
      let res = [];
      for (let i = 0; i + 1 < sorted.length; i += 2){
        res.push([sorted[i], sorted[i + 1]]);
      }
      return res[Math.floor(Math.random() * res.length)];
    };
    const item = getRandowPair(array);
    const set = new Set();
    while (set.size < 5){
      let i = Math.floor(Math.random() * array.length);
      if (!item.includes(array[i])){
        set.add(array[i]);
      }
    }
    const result = [item[1], ...set];
    console.log(result); // [ "e", "h", "c", "2", "j", "b" ]
    Ответ написан
    2 комментария