freeCodeCamp/guide/russian/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../missing-letters/index.md

12 KiB
Raw Blame History

title localeTitle
Missing Letters Пропущенные буквы

:triangular_flag_on_post: Не забудьте использовать Read-Search-Ask если вы застряли. Попробуйте подключить программу :busts_in_silhouette: и напишите свой собственный код :pencil:

:checkered_flag: Проблема Объяснение:

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

Связанные ссылки

:speech_balloon: Подсказка: 1

Вам нужно будет преобразовать из символа в ASCII-код, используя два метода, описанных в описании.

попытаться решить проблему сейчас

:speech_balloon: Подсказка: 2

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

попытаться решить проблему сейчас

:speech_balloon: Подсказка: 3

Вам нужно будет выяснить, где находится недостающее письмо, а также обрабатывать случай отсутствия буквы, поскольку для этого требуется определенное возвращаемое значение.

попытаться решить проблему сейчас

Осторожно, спойлеры!

предупреждающий знак

Решение впереди!

:beginner: Решение базового кода:

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"); 

:rocket: Код запуска

Код Объяснение:

  • В этих решениях используется цикл for .
  • Код встреченного символа сохраняется в коде .
  • Он проверяется, является ли код текущего символа ожидаемым (никакие символы не пропускаются), используя логический code of current character = code of first character + number of iterations .
  • Если символ отсутствует, отображается отсутствующий символ и возвращается окончательная строка.
  • undefined возвращается, если в строке отсутствует символ.

Связанные ссылки

:sunflower: Решение промежуточного кода:

// 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"); 

:rocket: Код запуска

Код Объяснение:

  • Сначала мы определяем переменные для хранения символьного кода для первой буквы в строке и для хранения любых отсутствующих букв, которые мы можем найти.
  • Мы превращаем строку в массив, чтобы сопоставить ее, вместо того, чтобы использовать петли for и while .
  • Как мы map через коды символов наши письма, мы идем по сравнению с той , которая должна быть в этом положении.
  • Если текущая буква совпадает, мы переместим переменную сравнения в следующую позицию, чтобы мы могли сравнить ее в следующем цикле.
  • Если нет, пропущенная буква будет назначена missing переменной, которая будет возвращена после завершения карты.
  • Если отсутствующих символов нет, верните undefined .

Связанные ссылки

:rotating_light: Упрощенное расширенное решение кода:

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, из которого был обнаружен разрыв)

:rotating_light: Расширенное решение для кода:

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"); 

:rocket: Код запуска

Код Объяснение:

  • Создается новая строка allChars .
  • Создайте регулярное выражение notChars, которое выбирает все, кроме str .
  • Цикл for используется для добавления всех букв в диапазоне к allChars .
  • match() используется, чтобы отменить str- буквы из вновь созданной строки, и она возвращается.
  • Если отсутствующих символов нет, верните undefined .

Связанные ссылки

:clipboard: ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:

  • :warning: НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
  • Добавьте объяснение своего решения.
  • Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced . :traffic_light:
  • Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( :warning: НЕ удаляйте существующие имена пользователей )

Видеть :point_right: Wiki Challenge Solution Template для Wiki Challenge Solution Template для справки.