search icon search icon ВЕРСИЯ ДЛЯ СЛАБОВИДЯЩИХ

Инженерный тур. 1 этап

Задача 1.1.(10 баллов)
Вкусный счет
Тема: системы счисления

Условие

Решите задачу на рис. 1.1 и запишите в ответ, чему равен X — число в десятичной системе счисления.

Рис. 1.1. Вкусный счет

Пояснение: все символы записаны в позиционной системе счисления, и она одинакова для верхнего и нижнего числа. Другие символы не предусмотрены.

Эта задача проверяет навык работы с математическими моделями и кодировками, что является частью задачи заключительного этапа.

Решение

В верхней строчке, слева от знака равенства, пять уникальных символов. Это означает, что сообщение создано в системе счисления с основанием 5 (по числу уникальных символов). При переводе \(1298_{10}\) в систему счисления с основанием 5 получаем \(20143_{5}\).

Сопоставляем символы с получившимся числом: «ананас» — 2, «пицца» — 0, «печенье» — 1, «пончик» — 4, «круассан» — 3. Из этого следует, что в нижней строке слева от знака равенства стоит число \(12340_5\).

Чтобы получить \(X\), необходимо перевести данное число из системы счисления с основанием 5 в десятичную: \(12340_{5} = 970_{10}\). Записываем 970 в ответ.

Ответ

970.

Задача 1.2.(10 баллов)
Ливерпульское кодирование
Тема: каналы связи

Условие

По восьми каналам связи закодировали и передали двоичные сообщения (рис. 1.2). Для формирования сигнала использовался принцип, очень похожий на манчестерское кодирование. Ниже приведены исходные данные до кодирования, которые передавали в канал, и принятые после прохождения каждого канала сигналы. При передаче по каналу данные могли исказиться, то есть передаться с ошибками. В ответ введите номер канала (только номер, без других символов) с наименьшим искажением данных.

Рис. 1.2. Ливерпульское кодирование

Эта задача проверяет навык анализа кодов и каналов связи, что является частью задачи заключительного этапа.

Решение

Манчестерское кодирование представляет собой кодировку двоичного разряда двумя тактами, где значение (ноль или единица) определяется характером изменения уровня между двух тактов. В системе, представленной в задаче, единица кодируется изменением уровня между двух тактов, а ноль — отсутствием изменения. По сути, это дифференциальное манчестерское кодирование со сдвигом на один такт вперед.

Принимая это во внимание, достаточно сопоставить кодируемый сигнал с исходными данными и подсчитать расхождения в каждом из каналов. Выяснится, что в шестом канале будет наименьшее число ошибок (одна).

Ответ

6

Задача 1.3.(30 баллов)
Тьюринг-младший
Темы: кодирование-декодирование, анализ кода

Условие

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

Невольно с этим хобби соприкоснулся и Алик, найдя на чердаке ламповую радиостанцию и собранную дедушкой телеграфную клавиатуру. Время пощадило технику, но не клей, на котором держались наклейки клавиш — они отпали от клавиатуры и лежали отдельно. В результате поиска и ревизии наклеек выяснилось, что клавиатура может отправлять заглавные латинские символы, цифры, пробел и некоторые знаки препинания (точка, запятая, восклицательный и вопросительный знак).

Алик решил восстановить раскладку клавиатуры. Как смог, он разложил наклейки, после чего стал набирать сообщения и смотреть, что именно отправляет клавиатура. Напишите программу, которая поможет Алику поскорее разобраться с раскладкой.

Задача интерактивная, поэтому программа взаимодействует с проверочной системой посредством стандартных потоков ввода и вывода. Иными словами, после отправки сообщения программа должна очистить буфер (выполнить flush) и считать ответ от системы (прочесть строку).

Итак, программа отправляет сообщение в раскладке Алика и получает в ответ от системы фактически отправленное. Например, программа отправит HELLO I AM ALIK, после должна прочитать строку из потока ввода, где получит, например, URYYB V NZ NYVX. Затем можно вновь отправлять очередное сообщение. Регистр латинских символов важен.

Как только программа восстановит кодировку, она должна отправить сообщение с символом @ в начале и через пробел привести такое сообщение, чтобы на выходе получилось GA DR OM. TKS VY MUCH FR UR CALL. UR RST 599. QTH IRKUTSK. OP IS ALIK. HW?.

В случае правильного итогового ответа программа ответит @ OK, и следует штатно завершить программу. В ином случае проверочная система выставляет WA. Также при наличии в любом сообщении символа не из алфавита задачи (например, строчных букв), проверка посылки завершается досрочно с вердиктом PE.

Например, программа присылает: @ TN QE BZ. GXF IL ZHPU SE HE PNYY. HE EFG 599. DGU VEXHGFX. BC VF NYVX. UJ?. Если это правильный ответ, проверочная система ответит @ OK, иначе завершит программу принудительно.

В пределах каждого теста нужно справиться с восстановлением кодировки не более, чем за 20 запросов. Если больше — решение отклоняется с WA. Если участник справился за минимально возможное число запросов, он получит за соответствующий тест максимальный балл, в противном случае — лишь половину.

Эта задача проверяет навык анализа кодировки, что является частью задачи заключительного этапа.

Примечания

  • Каждое входящее и исходящее сообщение должно заканчиваться переносом строки.
  • Очистка буфера делается следующим образом:

    • fflush(stdout) в C;
    • fflush(stdout) или cout.flush() в C++;
    • sys.stdout.flush() в Python;
    • System.out.flush() в Java.

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

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

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

Строки аналогичного формата.

Тестовые данные

Номер тестаСтандартный вводСтандартный вывод
1
HELLO I AM ALIK
@ TN QE BZ. GXF IL ZHPU SE HE PNYY. HE EFG 599. DGU VEXHGFX.
BC VF NYVX. UJ?
URYYB V NZ NYVX
@ OK

Тестовые данные

https://disk.yandex.ru/d/k52LF9wIEe7pbg.

Решение

В задаче представлен тривиальный шифр замены с нестандартным алфавитом. Необходимо восстановить алфавит замены. Это можно сделать одним сообщением, содержащим полный алфавит: «ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,!?». Получив ответ от проверочной системы, нужно сопоставить символ сообщения с символом отправленного алфавита и сформировать итоговую посылку, ориентируясь на эти сопоставления.

Ограничение на 20 посылок в условии для частичного решения — намеренно оставленная ловушка.

Авторское решение задачи на языке Python 3.12 представлено по ссылке: https://disk.yandex.ru/d/mSJEPZJZqp6MKw.

Задача 1.4.(30 баллов)
Цифровая наседка
Тема: автономное управление

Условие

Следить за чем-то бывает не так просто, а когда следить нужно сразу за многими вещами — здесь справится не каждый. Но можно доверить эту задачу роботам.

На Белоптичкинской птицефабрике проводится работа по технологизации слежки за подрастающими цыплятами. Руководство фабрики обратилось за помощью к местному кружку робототехников, и они собрали «робо-маму». Она круглосуточно отслеживает и различает цыплят с помощью ИИ и машинного зрения. Не хватало лишь одной немаловажной части — «подружить» робота с системой управления птицефабрикой, написанной на языке COBOL задолго до основания кружка.

Напишите программу-драйвер для «робо-мамы», реализующую логику приема и ответа согласно заданного протокола. Система управления отправляет в драйвер одну из следующих команд:

  • REMEMBER name — добавить в память цыпленка с заданным именем. Если такой цыпленок уже добавлен, ответить ERROR EXIST, иначе OK.
  • FORGET name — удалить цыпленка с заданным именем из памяти. Если такой цыпленок уже удален, ответить ERROR MISSING, иначе OK.
  • WATCH name — начать следить за цыпленком с заданным именем. Если такой цыпленок не существует, ответить ERROR MISSING, иначе OK, даже если слежение за цыпленком уже ведется.
  • UNWATCH name — перестать следить за цыпленком с заданным именем. Если такой цыпленок не существует, ответить ERROR MISSING, иначе OK, даже если слежение за цыпленком не ведется.
  • LIST type — перечислить цыплят в алфавитном порядке через запятую с пробелом. Например: 123, CHEEPY3, TAPI. Параметр type задает необходимый список: ALL — вывести всех цыплят в памяти, WATCH — всех, за которыми идет слежка.

Имя цыпленка (name) всегда представляет собой последовательность заглавных латинских букв и цифр. При попытке назвать цыпленка иначе нужно отвечать ERROR NAME в любой команде. Если переданная команда не соответствует протоколу, следует отвечать ERROR SYNTAX.

Эта задача проверяет навык работы с протоколами и их реализацией, что является частью задачи заключительного этапа.

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

Последовательность строк (до 200), в каждой из которых приведена отдельная команда.

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

Такое же число строк, в каждой из которых приводится ответ на соответствующую команду.

Тестовые данные

Номер тестаСтандартный вводСтандартный вывод
1
WATCH D0KOP98Y
WATCH z
WATCH gejb
WATCH W9S
REMEMBER 31K882IR
WATCH 31K882IR
WATCH 4S9C9Q8
WATCH 31K882IR
WATCH 31K882IR
WATCH 31K882IR
...
ERROR MISSING
ERROR NAME
ERROR NAME
ERROR MISSING
OK
OK
ERROR MISSING
OK
OK
OK
...

Тестовые данные

https://disk.yandex.ru/d/tdZA1mLOdrEuLQ.

Решение

Задача предполагает прямолинейную реализацию заданного протокола и интерпретацию всех переданных во входных данных команд, в том числе ошибочных (очень важно разделять ошибки формата имени и формата сообщения). Для хранения информации о цыплятах предлагается использовать структуру типа «словарь».

Авторское решение задачи на языке Python 3.12 представлено по ссылке: https://disk.yandex.ru/d/BfINPEVtKYTKfQ .

Задача 1.5.(20 баллов)
Бегущая строка
Тема: кодирование-декодирование

Условие

Передавать изображения на расстояние научились сравнительно недавно, в конце XIX века, а первые телевизоры просуществовали недолго, быстро уступив место более привычным электронно-лучевым трубкам. Но идея, лежащая в основе первых телевизоров, проста и интересна, и такой телевизор можно собрать своими руками (например, как в этой статье: https://nplus1.ru/material/2021/12/01/nipkow-avito).

Представим механический телевизор Б-2 на основе диска Нипкова, рассчитанного на отображение кадра в 30 строк с частотой 12,5 кадров в секунду. В телевизор передается двоичный сигнал частотой 22,5 кГц, задающий яркость светодиода (соответственно, в двух значениях — максимальная и минимальная).

Предлагается файл (https://disk.yandex.ru/d/VJHdZns97iwaLg) с сигналом, передаваемым в такой телевизор. Обусловимся, что прием сигнала начинается одновременно с движением самой верхней прорези от левого угла кадра, вращение идеально синхронизировано с передаваемым сигналом, а трапециевидным искажением изображения можно пренебречь.

Восстановите сообщение, содержащееся в видеоизображении, и приведите его в ответе. Оно состоит из букв русского алфавита и знаков препинания. Регистр важен.

Чтобы файл не был таким большим, дублирующие кадры удалены, а сигнал сжат с помощью алгоритма RLE. Для наглядности в качестве максимальной и минимальной яркости используются символы «*» и «.» соответственно. Так, 3*1.3*2. будет декодировано в ***.***..

Эта задача проверяет навык работы с кодировками и особенностями канала связи, что является частью задачи заключительного этапа.

Решение

RLE — способ сжатия через кодирование непрерывно повторяющихся последовательностей. Следовательно, для декодирования необходимо продублировать символы «*» и «.» указанное число раз. Для простоты решено не использовать отрицательные индексы, кодирующие неповторяющиеся последовательности.

Далее замечаем, что в задаче идет речь о строчной развертке сигнала. Так как частота передачи составляет 12,5 кадров в секунду при 30 строках, всего за секунду передается 375 строк. Частота входного двоичного сигнала указывает на число измерений в секунду, которое составляет 22500 Гц. Поделив это число на 375, получаем 60 — это горизонтальное разрешение, то есть число точек изображения (и соответственно символов) в одной строке.

Следовательно, разрешение кадра составляет 60 на 30 точек. Зная это, можно разбить декодированную по RLE последовательность символов на строки по 60 символов и отделить последовательности по 30 строк, формируя цепочку кадров. Получение искомого текста из нее осуществляется визуально.

Ответ

Сообщение: «Радио — это улей, в котором слышится жужжание всего мира!».

text slider background image text slider background image
text slider background image text slider background image text slider background image text slider background image