Пропущенные буквы - 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.
Комментариев нет:
Отправить комментарий