Шифр чата в игре: сдвиг букв

тема: Строки · уровень: базовый

Условие

В командном чате игры кто-то включил «шифр»: каждая буква заменяется на следующую по алфавиту, а после z снова идёт a. Если сдвиг сделать на k шагов, то это применяют k раз подряд.

Тебе нужно восстановить, что получится после такого сдвига.

Алфавит — только строчные латинские буквы a..z.

Формат ввода

Первая строка: целое число k — величина сдвига. Вторая строка: строка s из строчных латинских букв.

Формат вывода

Выведи строку, которая получится после сдвига каждой буквы строки s на k по циклу a..z.

Ограничения

Пример

Ввод:

2
abz

Вывод:

cdb

Как решать — идея подхода

Приём: Сдвиг по модулю 26 (ASCII-коды)

Ключевое наблюдение: алфавит циклический и содержит ровно 26 букв. Значит, сдвиг на 26, 52, 78… ничего не меняет, поэтому достаточно заменить k на k % 26.

Приём: работа с кодами символов (ord/chr) и арифметика по модулю 26. Это удобно, потому что буквы a..z идут подряд в таблице кодов, и можно считать позицию буквы как число.

План решения:

Мини-сниппет формулы (сердце решения): new = chr(ord('a') + (ord(ch) - ord('a') + k) % 26)

Сложность: O(n) по времени, где n = len(s), и O(n) по памяти на результат.

Частая ошибка: забыть сделать k % 26. Тогда при огромном k формула всё равно работает, но часто пишут сдвиг через многократное применение (k раз), что будет слишком медленно.

Разберись руками

В чате строка "abz" зашифрована: каждую букву двигают на 2 позиции вперёд по кругу a..z. После z снова идёт a. Нужно руками понять, что получится.

Идея: Сначала учти, что алфавит зациклен: много сдвигов можно сократить, потому что после полного круга всё повторяется. Потом для каждой буквы строки сдвинь её нужное число шагов вперёд, а если дошёл до 'z', продолжай снова с 'a'.

Решить задачу с автопроверкой на Python →

Куда дальше