Специализированные структуры данных и потоковая обработка

Коллекции стандартной библиотеки: deque, Counter, defaultdict и ChainMap

Содержание курса

0 / 1 баллов

Печать книжной гильдии

В мастерской книжной гильдии готовят личные печати для редких рукописей. Резчик берёт заготовку с цепочкой декоративных знаков и вырезает из неё один непрерывный кусок. На готовом оттиске должны присутствовать все три именные руны мастера, каждая ровно один раз. Любые другие знаки могут встречаться между ними или вокруг в каком угодно количестве.

Мастер бережёт материал и ищет самый короткий подходящий фрагмент. Если таких участков наименьшей длины окажется несколько, резчик выбирает тот, который находится ближе к началу заготовки.

Определите положение и длину выбранного для печати фрагмента.

Что уже дано

В заготовке программы уже подключён класс Counter из модуля collections и прочитаны две строки с помощью input():

  • runes — строка из трёх именных рун;
  • blank — строка-заготовка с цепочкой знаков.

Никаких других предварительных переменных или скрытых файлов нет.

Что нужно сделать

Допишите тело скрипта так, чтобы программа находила нужный непрерывный непустой фрагмент в строке blank и выводила результат на экран.

Фрагмент считается подходящим, если выполнены условия:

  • каждая из трёх именных рун из runes встречается в нём ровно один раз (с учётом регистра символов);
  • любые посторонние знаки могут присутствовать в любом количестве.

Среди всех подходящих фрагментов выберите тот, у которого длина минимальна. Если минимальную длину имеют несколько вариантов, выберите фрагмент с наименьшим начальным индексом.

Позиции символов в строке нумеруются с единицы. Выведите начальную позицию выбранного фрагмента и его длину через пробел. Если ни одного подходящего фрагмента в строке нет, выведите 0 0.

Ввод и вывод

Программа считывает данные из стандартного потока ввода stdin и выводит результат в стандартный поток вывода stdout.

Формат ввода

  • Первая строка содержит ровно три различные буквы ASCII (A-Z или a-z) без пробелов.
  • Вторая строка содержит заготовку длиной от 0 до 80 печатных символов ASCII (коды 32–126). Пробелы, включая начальные и завершающие, считаются знаками заготовки и учитываются в длине.

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

Одна строка с двумя целыми числами через пробел: начальная позиция (начиная с 1) и длина найденного фрагмента, либо 0 0, если подходящего фрагмента не существует.

О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    ABC
    xA?B#Cz
    
    Ожидаемый вывод
    2 5
    
Решение
Как проверяется решение

Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения и доступны преподавателям курса. Чтобы попросить преподавателя подключиться, отправьте обращение из диалога.

Проверка решения остаётся отдельным действием.

Коллекции стандартной библиотеки: deque, Counter, defaultdict и ChainMap — Практический Python для разработчиков: большой задачник — Latorn