Недавно я начал процесс набора персонала в 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, а rotationalFactornumber.

Было бы круто, если бы у нас было еще три вещи: запись charCodesFromInput, функция cipherChar и переменная cipheredChars тоже. После этого нам нужно будет только соединить cipherChars вместе и вернуть их. Вы также можете создать свою собственную переменную для этого.

Что, если мы начнем с этого:

Мы можем заметить, что вся логика в этой функции уже создана. Единственное, чего не хватает, так это логики шифрования каждого символа на входе. Давайте создадим для этого другую функцию, я назову ее: cipherChar.

Нам нужно убедиться, что мы принимаем во внимание три вещи:

  • Наши наборы важных символов: цифры, прописные и строчные буквы.
  • В ASCII эти наборы представлены числами в диапазоне 48–57, 65–90 и 97–122.
  • Наше решение должно хранить полученное зашифрованное число внутри того же набора, с которого оно было запущено, то есть 57 + 1 = 48 в нашем коде. Если исходный символ начинался в диапазоне чисел, он должен оставаться числом.

После всех этих соображений давайте создадим нашу функцию cipherChar:

Итак, у нас есть следующий конечный результат…

Конечный результат

Теперь мы можем протестировать нашу функцию:

Результат такой же, как мы и ожидали.