Как проверить, что случайные слова в строке становятся текущим словом в объекте? - PullRequest
0 голосов
/ 12 января 2019

как проверить случайные слова в строке, чтобы они были текущими словами, которые мы помещаем в объект температура для проверки в строке:

 obj = {
            two: 2,
            three: 3    
        }

если у меня есть эти строки WTWTHROETEO, это означает, что эти строки ['TWO', 'TWO' ,'THREE']

почему ['TWO', 'TWO' ,'THREE']? потому что на этих строках есть случайные слова, и мы должны сделать эти слова случайными. текущие слова в объектах

вот это input:

let str = 'WTWTHROETEO'

и output, который я хотел, это: [ 2,2,3 ]

Ответы [ 2 ]

0 голосов
/ 12 января 2019

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

function getWords(random) {
    function getSorted (s) {
        return Array.from(s).sort().join();
    }

    function fork(i, t) {
        var temp = t.join('');
        if (sorted === getSorted(temp)) {
            result.push(t);
            return;
        }
        if (temp.length >= sorted.length || i === keys.length) {
            return;
        }
        fork(i, t.concat([keys[i]]));
        fork(i + 1, t);
    }

    var result = [],
        sorted = getSorted(random);
        
    fork(0, []);
    return result;
}

var object = { TWO: 2, THREE: 3 },
    keys = Object.keys(object).sort(({ length: a }, { length: b }) => a - b),
    words = getWords('WTWTHROETEO'),
    numbers = words.map(keys => keys.map(k => object[k]));

console.log(words);
console.log(numbers);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 12 января 2019

Это может быть первый набросок того, что вы можете попытаться сделать.

Вы можете, конечно, рефакторинг и улучшить его.

Получите массив всех строчных букв вашей строки.

Затем для каждого ключа в вашем объекте получите массив всех строчных букв вашего ключа.

Хотя все ваши символы ключа включены в ваш строковый массив, увеличьте счетчик объектов этого ключа и удалите эти символы из массива входной строки.

Затем верните свои выходные данные со значениями ваших ключей за все время, которое они были подсчитаны в

function getOccurrences(inputString, obj) {
  let stringArray = inputString.toLowerCase().split('');
  let countObj = {};
  Object.keys(obj).forEach(checkKeyPresenceInString);

  return Object.entries(countObj)
    .map(getValuesFromKeys)
    .flat();

  function checkKeyPresenceInString(key) {
    countObj[key] = 0;
    const keyArray = key.toLowerCase().split('');
    // while all the chars of your key are included in your input string
    while (keyArray.every(e => stringArray.includes(e))) {
      countObj[key]++;
      keyArray.forEach(removeAllChars);
    }
  }

  function removeAllChars(c) {
    stringArray.splice(stringArray.indexOf(c), 1);
  }

  function getValuesFromKeys([key, value]) {
    return new Array(value).fill(obj[key]);
  }
}

const obj = { two: 2, three: 3 };
let string = 'WTWTHROETEO';
console.log(getOccurrences(string, obj));

const obj2 = { two: 2, three: 3, four: 4 };
let string2 = 'FWTWOUTHROETEOR';
console.log(getOccurrences(string2, obj2));

const obj3 = { two: 2, three: 3, four: 4, five: 5, six: 6};
let string3 = 'VEXFIIFWSTWOUTHROESTIEXOSRIVXEFIX';
console.log(getOccurrences(string3, obj3));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...