Коллекции стандартной библиотеки: deque, Counter, defaultdict и ChainMap
Содержание курса
0 / 1 баллов
Карусельный шифратор
Необычный прибор преобразует текст с помощью кольцевого барабана, на котором по кругу нанесены символы алфавита. Над барабаном закреплен неподвижный указатель, и его начальное положение известно. Механизм принимает исходную запись и читает её знак за знаком.
Если текущий символ есть на барабане, устройство отсчитывает смещение от указателя до нужной ячейки в заданном направлении по кругу. Зафиксировав это значение, прибор поворачивает барабан так, чтобы найденный символ встал точно под указатель, и следующий шаг начинает уже от него. Если же символа на кольце нет, барабан остаётся на месте, а механизм выдаёт условный знак пропуска.
Изобретателю нужно заранее узнать, какую цепочку смещений и знаков пропуска выдаст устройство для всей подготовленной фразы.
Что уже дано
Скрипт импортирует deque из модуля collections и считывает две строки через вызовы input():
alphabet— символы на кольцевом барабане;message— обрабатываемое сообщение.
Никаких других скрытых переменных или файлов нет. Вам предстоит заменить заглушку с ошибкой NotImplementedError собственным кодом.
Что нужно сделать
Обработайте символы строки message строго по порядку и выведите полученные значения в виде одной строки.
Правила работы устройства:
- Символы алфавита расположены на барабане по кругу в том порядке, в котором они переданы в первой строке. Изначально под указателем находится самый первый символ переданного алфавита.
- Направление отсчёта — вперёд по порядку символов алфавита (после последнего символа снова следует первый).
- Если текущий символ сообщения есть на барабане, вычислите количество шагов от текущего указателя до этого символа (целое неотрицательное число от
0до длины алфавита минус один). Если символ уже находится под указателем, смещение равно0. После фиксации смещения барабан поворачивается так, что этот символ оказывается под указателем для обработки последующих знаков. - Если символа сообщения нет на барабане, выдаётся знак пропуска
?, а барабан и указатель остаются в прежнем положении.
Ввод и вывод
Программа взаимодействует с пользователем через стандартные потоки stdin и stdout.
Формат ввода
- Первая строка содержит строку алфавита (от 1 до 52 различных ASCII-букв верхнего и нижнего регистров).
- Вторая строка содержит исходное сообщение (от 0 до 1000 печатных ASCII-символов, включая пробелы). Символ перевода строки не входит в само сообщение.
Формат вывода
Выведите одну строку, в которой через пробел записаны токены для каждого символа исходного сообщения в порядке его обхода: неотрицательные десятичные числа смещений или знак ?. Если исходное сообщение пустое, выведите пустую строку.
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
ABCD CA?AD
Ожидаемый вывод2 2 ? 0 3
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
