Самая большая сумма слов строки в js - PullRequest
0 голосов
/ 24 ноября 2018

Я решил эту проблему в javascript: Учитывая строку слов, вам нужно найти слово с наибольшим количеством очков.

Каждая буква слова набирает очки в соответствии с его положением в алфавите:= 1, b = 2, c = 3 и т. Д.

Вам необходимо вернуть слово с наибольшим количеством очков в виде строки.

Если два слова имеют одинаковый результат, вернуть слово, которое появляется раньше висходная строка.

Все буквы будут строчными, и все входные данные будут действительными.

Мой код следующий:

    function high(x){
  x = x.split(" ");
  var bestWord = 0;
  var bestWordS = "";
  for (var i = 0; i < x.length; i++){
    var word = x[i].split("");
    var letter;
    var wordScore;
      switch(word[i]){
        case "a":
          letter = 1;
          break;
        case "b":
          letter = 2;
          break;
        case "c":
          letter = 3;
          break;
        case "d":
          letter = 4;
          break;
        case "e":
          letter = 5;
          break;
        case "f":
          letter = 6;
          break;
        case "g":
          letter = 7;
          break;
        case "h":
          letter = 8;
          break;
        case "i":
          letter = 9;
          break;
        case "j":
          letter = 10;
          break;
        case "k":
          letter = 11;
          break;
        case "l":
          letter = 12;
          break;
        case "m":
          letter = 13;
          break;
        case "n":
          letter = 14;
          break;
        case "o":
          letter = 15;
          break;
        case "p":
          letter = 16;
          break;
        case "q":
          letter = 17;
          break;
        case "r":
          letter = 18;
          break;
        case "s":
          letter = 19;
          break;
        case "t":
          letter = 20;
          break;
        case "u":
          letter = 21;
          break;
        case "v":
          letter = 22;
          break;
        case "w":
          letter = 23;
          break;
        case "x":
          letter = 24;
          break;
        case "y":
          letter = 25;
          break;
        case "z":
          letter = 26;
          break;     
      }
      wordScore += letter;
      if ( wordScore > bestWord){
        bestWord = wordScore;
        bestWordS = x[i];
      }
    }
    return bestWordS;

}

Я не знаю, что такоенеправильно функция всегда возвращает пустую строку ("")

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Вы можете хранить все свои буквы в строке и использовать indexOf, чтобы получить оценку букв.
Также вы можете использовать один reduce, чтобы получить оценку слова, и другой reduce, чтобы найти слово сНаибольший балл:

const abc = 'abcdefghijklmnopqrstuvwxyz';

const high = (x) => x.split(/\s+/).reduce((a, w) => (w = [w, [...w].reduce((a, l) => a += 1 + abc.indexOf(l), 0)]) && ~~a[1] > w[1] ? a : w, [])[0]

console.log(high('lorem ipsum dolor'));

Обновление для тех, у кого проблемы с чтением однострочников,
очень читаемая версия с использованием двух вложенных циклов for:

const abc = 'abcdefghijklmnopqrstuvwxyz';

const high = (x) => {
  let words = x.split(/\s+/);
  let best, maxscore = 0;
  for (let word of words) {
    let score = 0;
    for (let letter of word) {
      score += 1 + abc.indexOf(letter);
    }
    if (score > maxscore) {
      best = word;
      maxscore = score;
    }
  }
  return best;
}

console.log(high('lorem ipsum dolor'));
0 голосов
/ 24 ноября 2018

Предполагая, что "оценка" каждого слова такая же, как в вашем примере, вы можете просто: Редактировать: исправлена ​​проблема с функцией сортировки, благодаря @ KoshVery

 const scoresByLetter = "abcdefghijklmnopqrstuvwxyz".split('');
    const sentence = "azzzzim zoom";
    const words = sentence.split(" ");
    
    //Declearing a function to calculate score for a single word
    const calculateWordWeight = (word)=>{
        return Array.prototype.reduce.apply(word, [(score, letter) =>{
            return score + scoresByLetter.indexOf(letter);
        },0]);
    };
    
    //Calculating score for each word
    const scores = words.map(calculateWordWeight);
    
    //Finding the highest score value
    let highestScore = Math.max(scores);

    //Then finding the highest value index
    let highestScoreIndex = scores.indexOf(highestScore);

    //Finally, finding the word by the index
    let wordWithHighestScore = words[highestScoreIndex];
    
    alert(wordWithHighestScore);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...