Проверьте, превышает ли значение кода ASCII символа в строке больше или меньше значения кода ASCII предыдущего символа - JavaScript - PullRequest
1 голос
/ 03 июня 2019

Попытка решить эту проблему на codewars .

Функция должна возвращать true, если символы в строке отображаются по порядку.

Например:

solve ("abc") = True, потому что он содержит a, b, c

solve ("abd") = False, потому что a, b, d не являются последовательными.

solve ("dabc) = True, потому что он содержит a, b, c, d

solve ("abbc") = False, потому что b не встречается ни разу.

solve ("v") = True

Моя мысль состоит в том, чтобы проверить, имеет ли следующий символ в строке значение кода ASCII, превышающее значение кода ASCII предыдущего символа.

Если это так, вернуть true. В противном случае верните false.

У меня есть:

function solve(s){
  for (let i = 0; i < s.length; i++) {
    let character = s[i];
    //if character ASCII value is > than the ASCII value of character before it
    if (character.charCodeAt(0) > /*previous character.charCodeAt(0));*/ ) {
      return true
    }
    else {
      return false;
    }
  }
}

Но, как вы видите, я не знаю, как сделать сравнение с предыдущим персонажем.

1 Ответ

2 голосов
/ 03 июня 2019

У вас есть несколько проблем в вашем коде.

  1. Вы не сравниваете нужный контент в предложении if.Вы сравниваете одно и то же.Вам нужно проверить, больше ли индекс следующего кода кода, чем ваш текущий.

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

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

Я бы сказал, в основном, в вашей функции, если следующий код символа меньше текущего возврата false, в противном случае возвращает true.Это вернет true только после прохождения всей строки.

function solve(s){
  s = s.trim().split("").sort().join(""); // remove white spaces, split to sort and then join again
  for (let i = 0; i < s.length - 1; i++) {
    if ((s.charCodeAt(i + 1) - s.charCodeAt(i)) !== 1) {
      return false;
    }
  }
  return true;
}


console.log(solve('abcdef')); //true
console.log(solve('afew')); //false
console.log(solve('defghijklmn')); //true
console.log(solve('lkjsadf')); //false
console.log(solve('123456')); //true
console.log(solve('123abc')); //true
console.log(solve('abc123')); //false
console.log(solve('abd')); //false
console.log(solve('abbc')); //false
console.log(solve('abc')); //true
console.log(solve('dabc')); // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...