Niklaus Wirth

Niklaus Wirth

Translate

Пропущенные буквы

Пропущенные буквы - Missing letters

Седьмой день программы "#100 Days Of Code"
Функция, которая ищет пропущенные буквы в части строки, данной в алфавитном порядке. Если находит, то возвращает пропущенную букву, а если нет, то должна вернуть undefined

Если не понятно задание. то лучше сразу посмотреть на ответы в конце поста

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

Решил строку превратить в массив и далее сделать перебор массива, переводя все буквы в Юникод и добавляя их в конец нового, пустого массива

Для перевода букв в Юникод я использовал String.prototype.charCodeAt()

Теперь в новом массиве мы имеем последовательность цифр Юникода. Наша задача найти пропущенную цифру. Для этого я решил запустить второй цикл for.

Вот эта строка условия ((numArray[k]+1) < (numArray[k+1])) то есть, если следующая цифра будет больше, чем +1, то нужно к Юникоду предыдущей цифры прибавить единицу. Тем самым, мы получим Юникод недостающей буквы. Теперь делаем возврат. Юникод переводим в буквы, String.fromCharCode()

Да и возврат num в конце - обязательное условие, иначе не получим - желаемый undefined

function fearNotLetter(str) {
var numArray = [];
var num ;
var strArray = str.split("");
var ch;
for(var i = 0; i < strArray.length; i++){
  numArray.push(str.charCodeAt(i));
}
for(k = 0; k < numArray.length; k++){
  if((numArray[k]+1) < (numArray[k+1])){
    num = numArray[k]+1;
     return String.fromCharCode(num);
  }  
 
} 
  return num; 
}

fearNotLetter("abce");

Второй вариант решения

Здесь совершенно другой подход в том, что нужно создать отдельный массив с алфавитом

Полученную строку переводим в верхний регистр и разделяем ее по буквам. В отдельную переменную помещаем весь алфавит в верхнем регистре. Отдельно создаем переменную, которая будет находить в нашем алфавите первую букву от начала заданной нам последовательности. Создаем отдельно переменную под последнюю букву

Делаем проверку, сопоставляя буквы в двух массивах. Если находим несовпадение, то возвращаем эту букву в нижнем регистре.

Отдельно возвращаем undefined

Ничего не могу сказать по поводу этого решения, но мне первое нравится больше. Мне кажется, что оно более полно отражает возможности JavaScript

Друзья, а что думаете вы?
Есть ли у вас свои , отличные от этих решения?

Оставляйте комментарии, или ссылки на ваш gitHub, freeCodeCamp, Codepen или другие ресурсы.
Давайте дружить!

function fearNotLetter(str) {
  str = str.toUpperCase();
  str = str.split("");
  var alphabet =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
  var startRange = alphabet.indexOf(str[0]);
  var endRange = alphabet.indexOf(str[str.length-1]);
  
  
  for (var i=0; i < str.length; i++) {
    
    if (str[i] != alphabet[startRange+i]) {
      //str.splice(i, 0, alphabet[startRange+i]);
      //return str[i].toLowerCase();

      return alphabet[startRange+i].toLowerCase();
    }else {
      
    }
  }
  return undefined;
}

fearNotLetter("abce");
fearNotLetter("abce")
return "d".

fearNotLetter("abcdefghjklmno")
return "i".

fearNotLetter("bcd")
return undefined.

fearNotLetter("yz")
return undefined.

Комментариев нет:

Отправить комментарий