Математика для получения кода символов Ascii

Итак, в основном я делаю некоторые упражнения JS, и я понимаю этот код, просто не могу понять, какая математика стоит за получением символов кода Ascii в функции String.fromCharCode? почему мы уменьшаем на 18?

Пусть функция LetterChanges(str) принимает передаваемый параметр str и изменяет его, используя следующий алгоритм. Замените каждую букву в строке буквой, следующей за ней в алфавите (т. е. c становится d, z становится a). Затем сделайте каждую гласную в этой новой строке (a, e, i, o, u) прописной и, наконец, верните эту измененную строку.

function LetterChanges(str) {

str = str.trim().toLowerCase();
var len = str.length;
var newStr = '';

for (var i = 0; i < len; i++) {
if (/[a-ce-gi-mo-su-y]/.test(str[i])) {
    newStr += String.fromCharCode(((str[i].charCodeAt(0) - 18) % 26) + 
97)    
}
else if (/[zdhnt]/.test(str[i])) {
    newStr += String.fromCharCode(((str[i].charCodeAt(0) - 18) % 26) + 
65);
}
else {
 newStr += str[i]; 
}
}
return newStr; 

}


LetterChanges(readline());

Я не могу точно знать, что происходит, если вы не опубликуете, что должен делать код... Это одна из проблем CoderByte или что-то в этом роде?

Samleo 14.04.2019 15:42

Покажите нам, что вы сделали, чтобы попытаться понять код, и отредактируйте свой вопрос, чтобы он соответствовал тому, что вы спрашиваете. Вопросы с домашним заданием подходят для Stack Overflow, но вам нужно будет немного поработать. См. Как задавать и отвечать на вопросы по домашнему заданию

Charlie Wallace 14.04.2019 16:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
164
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Факт: charCode для 'a' равен 97 и (97 - 18)% 26 == 1

Возьмем, к примеру, 'b', (98 - 18) % 26 == 2, поэтому после изменения его charCode, равный 97 + 2 == 99, станет 'c'. Это правило распространяется на все 'a-z'.

Теперь вы должны увидеть узор.

Тест: что, если вы хотите изменить заглавные буквы, что бы вы выбрали в качестве «магического числа» для этого случая?

Ответ принят как подходящий

О ASCII

Ну, как вы знаете, компьютеры не хранят символы в виде «a», «b», «z» или «.», они принимают только двоичные биты (0 или 1). Эти двоичные биты можно использовать для формирования целых чисел и чисел, но не строк и символов.

Так как же компьютер хранит символы? Вот тут-то и появляется ASCII (американский стандартный код для обмена информацией).

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

Итак, чтобы ответить на ваш первый вопрос:String.fromCharCode(x) просто возвращает вам символ в стандартизированной таблице ASCII, соответствующий числу x. Например, String.fromCharCode(65) вернет вам 'A', потому что код ASCII для 'A' стандартизирован как 65.

Почему -18

Это умный (но сбивающий с толку) хак, чтобы заменить все строчные буквы символом, следующим за ним.

Поскольку str была сделана строчной из строки str = str.trim().toLowerCase();, str[i] теперь будет содержать только значения от 97 ('a') до 97+25 = 122 ('z'). Теперь 18 = 122 (mod 26) или 122%26.

Это необходимо для учета того факта, что «z» нужно перейти к «a», и поскольку у нас есть только 26 символов от «a» до «z», которые нам нужно «обернуть» (модуль/%)

Обратите внимание, что:

(97('a')-18)%26 = 1
(98('b')-18)%26 = 2
...
(122('z')-18)%26 = 0

Поэтому, когда вы добавляете 97 ('a') к каждому из чисел, вы получаете функциональное отображение 'a'->'b', 'b'->'c', ..., 'z'->'a '

Другие вопросы по теме