Легенда

Главному герою фантастической игры Семёну не повезло - он застрял в бюрократической параллельной вселенной, в одной далёкой стране на альтернативной Земле. В этой стране для регулирования паролей в аккаунтах государственных сервисов используется особая директива – Перечень регламентов утверждения действительности информационной кодировки (ПРУДИК). Каждый государственный сервис каждому новому аккаунту предписывает набор правил ПРУДИКа, по которым пользователю нужно сочинить новый пароль и отправить его бумажной почтой. Чтобы попасть в родную вселенную, Семёну предстоит пройти чудовищное испытание – зарегистрироваться на всех онлайн-сервисах и подобрать к ним пароли, соответствующие поставленным правилам Перечня.

ПРУДИК состоит из пронумерованного набора правил. Каждое правило определяет ограничение на необходимый пароль:

  1. Пароль должен содержать не менее 5 символов.
  2. Пароль должен содержать арабские цифры.
  3. Пароль должен содержать заглавную букву английского алфавита.
  4. Пароль должен содержать один из специальных символов: ~!@#$%^&*
  5. Сумма всех арабских цифр в пароле должно равняться 25.
  6. Пароль должен содержать название месяца на английском языке с заглавной буквы.
  7. Сумма всех арабских и римских [1] чисел в пароле должна равняться 35.
  8. Пароль должен содержать римскую цифру.
  9. Перемножение всех римских чисел [1] в пароле должно равняться 35.
  10. Каждое слово [2] в пароле должно заканчиваться на .py.
  11. Каждое слово должно содержать не более 7 символов.
  12. Пароль не должен содержать пробелов.
  13. Каждое слово должно начинаться с большой буквы.
  14. Пароль должен заканчиваться восклицательным знаком!
  15. Пароль должен начинаться с символа $.
  16. Пароль является палиндромом (без учёта пробелов и регистра).
  17. Пароль содержит корректно расставленные скобки: ()[]{}<>.

[1] Римские числа – это непрерывная последовательность римских цифр, приведённых в порядке невозрастания их мощности.

[2] Слово – это последовательность символов, разделённых одним и более пробелом.

Реализуйте бота, который выполняет проверку соответствия сообщений ПРУДИКу и подсказывает, подходит ли придуманный пароль к очередному сервису.

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

В начале работы система отправляет сообщение и ждёт от вас ответа. Обработав завершающее сообщение, ваше решение должно штатно завершиться.

Формат получаемых сообщений:

  • * 1,2,3,4 – заявляет набор правил, которые необходимо проверять
  • ? проверь меня – проверить сообщение на соответствие правилам. Сообщение рассматривается без вопросительного знака и пробела в начале.
  • # – закончить работу

Формат отправляемых сообщений:

  • NO 1,2,3,4 – ответ на проверку, если сообщение не соответствует правилам. Через запятую приводятся нарушенные правила в порядке возрастания номера.
  • OK – ответ на все остальные сообщения, в т.ч. на проверку в случае полного соответствия.
Ограничение времени   1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt

Для решения этой задачи у вас есть 20 попыток.

Видео-разбор