12 KiB
title | localeTitle |
---|---|
Missing Letters | Пропущенные буквы |
Не забудьте использовать Read-Search-Ask
если вы застряли. Попробуйте подключить программу и напишите свой собственный код
Проблема Объяснение:
Вы создадите программу, которая найдет недостающую букву из строки и вернет ее. Если отсутствует пропущенная буква, программа должна вернуться к неопределенной. В настоящее время нет тестового примера для строки, содержащей более одной буквы, но если бы она была одна, была бы использована рекурсия. Кроме того, буквы всегда предоставляются в порядке, поэтому их сортировка не требуется.
Связанные ссылки
- Строковый глобальный объект
- JS String Prototype CharCodeAt
- String.fromCharCode
Подсказка: 1
Вам нужно будет преобразовать из символа в ASCII-код, используя два метода, описанных в описании.
попытаться решить проблему сейчас
Подсказка: 2
Вам нужно будет проверить разницу в коде ASCII, поскольку они в порядке. Использование диаграммы было бы очень полезно.
попытаться решить проблему сейчас
Подсказка: 3
Вам нужно будет выяснить, где находится недостающее письмо, а также обрабатывать случай отсутствия буквы, поскольку для этого требуется определенное возвращаемое значение.
попытаться решить проблему сейчас
Осторожно, спойлеры!
Решение впереди!
Решение базового кода:
function fearNotLetter(str) {
for(var i = 0; i < str.length; i++) {
/* code of current character */
var code = str.charCodeAt(i);
/* if code of current character is not equal to first character + no of iteration
hence character has been escaped */
if (code !== str.charCodeAt(0) + i) {
/* if current character has escaped one character find previous char and return */
return String.fromCharCode(code - 1);
}
}
return undefined;
}
// test here
fearNotLetter("abce");
Код Объяснение:
- В этих решениях используется цикл
for
. - Код встреченного символа сохраняется в коде .
- Он проверяется, является ли код текущего символа ожидаемым (никакие символы не пропускаются), используя логический
code of current character = code of first character + number of iterations
. - Если символ отсутствует, отображается отсутствующий символ и возвращается окончательная строка.
undefined
возвращается, если в строке отсутствует символ.
Связанные ссылки
- JS для пояснений
- String.length
Решение промежуточного кода:
// Adding this solution for the sake of avoiding using 'for' and 'while' loops.
// See the explanation for reference as to why. It's worth the effort.
function fearNotLetter(str) {
var compare = str.charCodeAt(0), missing;
str.split('').map(function(letter,index) {
if (str.charCodeAt(index) == compare) {
++compare;
} else {
missing = String.fromCharCode(compare);
}
});
return missing;
}
// test here
fearNotLetter("abce");
Код Объяснение:
- Сначала мы определяем переменные для хранения символьного кода для первой буквы в строке и для хранения любых отсутствующих букв, которые мы можем найти.
- Мы превращаем строку в массив, чтобы сопоставить ее, вместо того, чтобы использовать петли
for
иwhile
. - Как мы
map
через коды символов наши письма, мы идем по сравнению с той , которая должна быть в этом положении. - Если текущая буква совпадает, мы переместим переменную сравнения в следующую позицию, чтобы мы могли сравнить ее в следующем цикле.
- Если нет, пропущенная буква будет назначена
missing
переменной, которая будет возвращена после завершения карты. - Если отсутствующих символов нет, верните
undefined
.
Связанные ссылки
Упрощенное расширенное решение кода:
function fearNotLetter(str) {
for (let i = 1; i < str.length; ++i) {
if (str.charCodeAt(i) - str.charCodeAt(i-1) > 1) {
return String.fromCharCode(str.charCodeAt(i - 1) + 1);
}
}
}
Код Объяснение:
- Петля над строкой
- Проверьте, не отличается ли разница в символьных кодах между соседними символами в строке более 1 (таблица ASCII chack)
- Верните отсутствующий символ (+1, из которого был обнаружен разрыв)
Расширенное решение для кода:
function fearNotLetter(str) {
var allChars = '';
var notChars = new RegExp('[^'+str+']','g');
for (var i = 0; allChars[allChars.length-1] !== str[str.length-1] ; i++)
allChars += String.fromCharCode(str[0].charCodeAt(0) + i);
return allChars.match(notChars) ? allChars.match(notChars).join('') : undefined;
}
// test here
fearNotLetter("abce");
Код Объяснение:
- Создается новая строка allChars .
- Создайте регулярное выражение notChars, которое выбирает все, кроме str .
- Цикл
for
используется для добавления всех букв в диапазоне к allChars . match()
используется, чтобы отменить str- буквы из вновь созданной строки, и она возвращается.- Если отсутствующих символов нет, верните
undefined
.
Связанные ссылки
- Ресурсы JS Regex
- JS Ternary
- Совместимость с JS String Prototype
- Присоединиться
ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
- НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
- Добавьте объяснение своего решения.
- Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced .
- Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( НЕ удаляйте существующие имена пользователей )
Видеть
Wiki Challenge Solution Template
дляWiki Challenge Solution Template
для справки.