2. Время на выполнения заданий – 90 минут (надеюсь на Вашу честность)
Сегодня, вам предлагается пройти Python Challenge.
Начать задания можно по ссылке: http://www.pythonchallenge.com
Первые пару заданий мы разберем, а дальше все будет зависеть от Вас!
Давайте введем ряд ограничений:
1. Первые три задания не учитываются (мы их сейчас разберем)
2. Время на выполнения заданий – 90 минут (надеюсь на Вашу честность)
3. Не подглядыввать!
Итак, начнем.
Дизайн сайта оставляет желать лучшего, но мы пришли делать задания, переходим по адресу:
И нажимаем по ссылке.
Задание 1:
Под заданием есть подсказка: «Попробуй изменить URL-адрес», поскольку мы работаем из браузера, смотрим в адресную строку:
На картинке нам предлагается некоторое числовое значение, попробуем изменить адрес, дописав в конце 238. html:
Адрес | Ответ |
![]() | ![]() |
По данному адресу лежит еще одна подсказка: «Нет… значение 38 немного выше чем двойка…». Включаем немножко математики и находим значение выражения 238, ну и поскольку это Python Challenge, то используем Python, для этого нам хватит и консоли:
Консоль | Ответ |
![]() | ![]() |
|
Вставляем полученное значение в адресную строку:
Адрес | Ответ |
![]() | ![]() |
И попадаем на новое задание!
Здесь нам предлагают текст, и картинку-подсказку. Если представить алфавитный ряд на английском языке и примерить смещение на картинке, то получаем следующее:
Получаем смещение, подобное шифру Цезаря, когда буква кодируется смещением её индекса в алфавите.
Всегда есть два варианта: примерить смещение вручную, и написать небольшой скрипт, который сделает это за нас.
Поскольку программисты наделены способностью автоматизировать рутинные процессы, напишем небольшой скрипт, который решает эту задачу. Для начала определим переменные, которые необходимы:
Хех, а теперь ближе:
1. text – переменная, содержащая исходный текст
2. uncoded – символы, которые не поддаются кодированию (по тексту это точка, пробел, апостроф и круглые скобки); такие символы просто пропускаются
3. alphabet – исходный алфавит кодирования (в нашем случае – латинский)
4. answer – переменная, в которую мы будем записывать ответ
Теперь непосредственно к алгоритму:
1. Перебираем символы из переменной text
2. Если символ в переменной uncoded, то дописываем его в answer и переходим к следующему шагу
3. Получаем индекс символа в алфавите
4. Получаем смещение символа (на две позиции)
5. Дописываем смещенный символ в answer
Ну и в конце выводим answer:
Разработчики надеются, что вы не переводили текст руками и использовали для этого скрипты. Для этого текст и сделан таким длинным. Также нам подсказывают, что в python есть встроенные функции для работы со смещениями: string.maketrans() (но, мы же крутые разработчики и написали все сами). А теперь, предлагается применить полученный алгоритм к адресной строке. Копируем адрес страницу с заданием и прогоняем его через наш алгоритм:
Код | Результат |
![]() | Ошибка, в строке присутствуют символы, отсутствующие в алфавите. |
Дополним переменную uncoded двоеточием и символом «/» | |
![]() | jvvr://yyy.ravjqpejcnngpig.eqo/re/fgh/ocr.jvon |
такого адреса не существует в принципе, по этому просто сократим адрес до названия целевой страницы (map. html) | |
![]() | ocr.jvon |
Попробуем дописать ocr. jvon в адресную строку | |
![]() | В ответ получаем файл ocr.jvon, открываем его и смотрим, что внутри! |
А внутри файла небольшая насмешка от разработчиков: «Вы когда-нибудь видели расширение у файла JVON!?». |
Ну и последнее, что осталось, перейти по адресу:
http://www.pythonchallenge.com/pc/def/ocr.html
(заменяем jvon на html)
И попадаем на третье задание:
Нам предлагают расшифровать текст, и подсказывают, что может быть текст в книге, но МОЖЕТ БЫТЬ в ресурсах страницы.
Немного включив разработчика и после пары неудачных попыток, получаем HTML-ресурсы страницы, для этого переходим в панель разработчика (F12 в браузере):
На первый взгляд стандартная HTML-страница. Придется поискать странности, поочередно смотрим элементы:
В конце концов находим скрытый текст на странице и задание к нему: «Среди хаоса символов, найдите уникальные»
Ну что, напишем небольшой скрипт (на 1246 строк), который за это отвечает:
Нам понадобятся переменные:
1. text – исходный текст для поиска
2. rare – список в котором будем считать количество каждого символа
3. indexes – список, в котором будем хранить последний индекс символа
4. answer – для записи ответа
Переменная text (скопируйте текст из файла 3.txt):
Остальные переменные:
По алгоритму все предельно просто:
1. Перебираем символы исходного текста
2. Если такой символ уже существует в нашем списке, то прибавляем к счетчику 1 и запоминаем его индекс
3. Если символ нам еще не встречался, то записываем его в оба списка
Далее, избавляемся от элементов, у которых счетчик больше нуля:
Сортируем оставшиеся значения относительно их индексов:
И формируем ответ:
Если все сделано правильно, в ответе получится слово, которое необходимо вставить в адресную строку и перейти к четвертому заданию:
В слове 8 букв.
Удачных дальнейших заданий!