Недавно я начал процесс набора персонала в Meta, ранее известную как Facebook.
Мы запланировали телеконференцию, которая состоится в пятницу, 25 марта 2022 года.
После создания моего карьерного профиля (инженер-программист, инфраструктура) они предоставили мне некоторые ресурсы для учебы и достижения успеха в День Frabjous.
Первая задача состоит в шифровании строки путем вращения. Вот почему задача называется ротационным шифром.
Вот вызов:
Ротационный шифр
Один простой способ зашифровать строку — «повернуть» каждый буквенно-цифровой символ на определенную величину. Поворот символа означает замену его другим символом, отстоящим на определенное количество шагов в обычном алфавитном или числовом порядке.
Например, если строка «Зебра-493?» поворачивается на 3 позиции, в результате получается строка «Cheud-726?». Каждый буквенный символ заменяется символом на 3 буквы выше (переход от Z к A), а каждый цифровой символ заменяется символом на 3 цифры выше (переход от 9 до 0). Обратите внимание, что небуквенно-цифровые символы остаются неизменными.
Учитывая строку и коэффициент вращения, вернуть зашифрованную строку.
Подпись
string rotatealCipher (строковый ввод, int rotateFactor)
Ввод
1 ‹= |ввод| ‹= 1 000 000
0 ‹= коэффициент вращения ‹= 1 000 000
Вывод
Возвращает результат поворота ввода число раз, равное rotateFactor.
Пример 1
ввод = Зебра-493? rotateFactor = 3 output = Cheud-726?
Пример 2
ввод = abcdefghijklmNOPQRSTUVWXYZ0123456789 rotateFactor = 39 вывод = nopqrstuvwxyzABCDEFGHIJKLM9012345678
Пришло время решить эту проблему. Имя, которое они выбирают для функции, — rotationalCipher
, которое получает input
в качестве первого параметра и является string
, а rotationalFactor
— number
.
Было бы круто, если бы у нас было еще три вещи: запись charCodesFromInput
, функция cipherChar
и переменная cipheredChars
тоже. После этого нам нужно будет только соединить cipherChars
вместе и вернуть их. Вы также можете создать свою собственную переменную для этого.
Что, если мы начнем с этого:
Мы можем заметить, что вся логика в этой функции уже создана. Единственное, чего не хватает, так это логики шифрования каждого символа на входе. Давайте создадим для этого другую функцию, я назову ее: cipherChar
.
Нам нужно убедиться, что мы принимаем во внимание три вещи:
- Наши наборы важных символов: цифры, прописные и строчные буквы.
- В ASCII эти наборы представлены числами в диапазоне 48–57, 65–90 и 97–122.
- Наше решение должно хранить полученное зашифрованное число внутри того же набора, с которого оно было запущено, то есть
57 + 1 = 48
в нашем коде. Если исходный символ начинался в диапазоне чисел, он должен оставаться числом.
После всех этих соображений давайте создадим нашу функцию cipherChar
:
Итак, у нас есть следующий конечный результат…
Конечный результат
Теперь мы можем протестировать нашу функцию:
Результат такой же, как мы и ожидали.