Введение в задачу скрытного кодирования и разбивка проблем

Что такое Foobar Challenge? 🧐

Foobar Challenge — это соревнование по программированию, организованное Google, которое можно выполнить как на Python, так и на Java. Я выполнил задачу, используя Python. У задачи есть собственный сервер с определенными командами в стиле терминала.

Чтобы добавить немного веселья, это космическая тематика. Злой командир Лямбда похитил космических кроликов, и вы должны их спасти. Каждая проблема добавляет больше контекста в предысторию. Задачи различной сложности организованы в 5 уровней. Каждый вопрос должен быть решен в течение определенного срока. Для более высоких уровней дается больше времени.

Лично я обнаружил, что задачи уровня 1, 2 и 3 похожи на задачи Leetcode как по сложности, так и по структуре. Проблемы были простыми и редко требовали оптимизации кода для повышения скорости. С другой стороны, уровни 4 и 5 были более сложными и объединяли несколько концепций в одну задачу.

Как принять участие в Foobar Challenge? 🙋‍♀️

Принять участие в квесте можно двумя способами:

  1. Google расширяет приглашение через браузер.
  2. Друг отправляет вам код приглашения

Я столкнулся с проблемой через первый метод. Я гуглил «понимание списка» для другой статьи, и мой браузер развернулся, чтобы показать приглашение. Я никогда раньше не слышал о вызове Foobar и был немного осмотрителен. Убедившись, что это законный вызов, я согласился.

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

Для второго способа вам нужен друг, который пришлет вам код приглашения. Один пригласительный код дается после прохождения 2-го уровня. Другой дается после прохождения 4-го уровня.

Если вы заинтересованы в участии в конкурсе, дайте мне знать. У меня есть неиспользованный реферальный код.

Использует ли Google Challenge для найма? 🤑

В какой-то момент Google использовал вызов, чтобы найти новые таланты. Вы найдете много людей в Интернете, с которыми рекрутер Google связался через один или два дня после выполнения задания. Однако похоже, что Google не использовал вызов для найма с 2020 года.

После завершения уровня 3 сервер Foobar спросит, хотите ли вы предоставить свою контактную информацию рекрутеру Google. Я предоставил свои данные, но ничего от них не слышал.

Тем не менее, я по-прежнему считаю, что этот вызов стоит того. Это познакомит вас с новыми концепциями кодирования, отточит ваши навыки и, в конечном итоге, сделает вас лучшим разработчиком.

На что обратить внимание и другие советы 💡

Google предоставляет файл constraints.txt, но он не очень подробный. Например, в нем говорится, что разрешены все стандартные библиотеки, за некоторыми перечисленными исключениями. Однако math и numpy не разрешены, хотя это общие библиотеки. Чтобы проверить, какие библиотеки разрешены, я импортировал библиотеку, вернул ответ одного из тестовых случаев, а затем проверил решение. Если решение прошло один тестовый пример, библиотека была приемлемой.

Кроме того, закомментируйте все операторы печати перед проверкой кода. Любые операторы печати приведут к сбою тестовых примеров.

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

Наконец, до этой задачи у меня не было опыта работы с Python 2.7. На самом деле, я протестировал многие из своих решений для проблем более низкого уровня в Python 3. Это обернулось для меня позже в задаче. В частности, я не знал, что в Python 2.7.13 оператор / выполняет целочисленное деление, если входные данные являются целыми числами. Например,

Однако в Python 3 / выполняет деление с плавающей запятой.

Вопросы и концепции 📚

Внимание — впереди спойлеры ⛔️

Ниже я разбиваю вопросы и объясняю свой мыслительный процесс. Я также предлагаю решения. Однако настоятельно рекомендую сначала решить проблему. Лучшая часть задачи — это удивление и удовлетворение от решения неуловимой проблемы.

Я обсуждал не публиковать решения, а просто объяснять основные концепции. Тем не менее, частью кодирования является изучение того, как устранять неполадки и точно определять, где код дает сбой. Поэтому я решил опубликовать решения, чтобы, если вы застряли, вы могли видеть, где именно ваша логика расходится.

Уровень 1: Задача 1 ⭐️

Я люблю Лэнса и Дженис
=====================

Вы поймали двух своих товарищей-миньонов, пересылающих туда-сюда закодированные записки — не меньше, чем при исполнении служебных обязанностей! Хуже того, вы почти уверены, что это не связано с работой — они оба большие поклонники космической мыльной оперы «Лэнс и Дженис». Вы знаете, как сильно командир Лямбда ненавидит расточительство, поэтому, если вы сможете доказать, что эти миньоны тратят ее время на передачу заметок, не связанных с работой, это значительно приблизит вас к продвижению по службе.

К счастью для вас, миньоны не совсем продвинутые криптографы. В их коде каждая строчная буква [a..z] заменяется соответствующей буквой в [z..a], а все остальные символы (включая прописные буквы и знаки препинания) остаются нетронутыми. То есть «a» становится «z», «b» становится «y», «c» становится «x» и т. д. Например, слово «vmxibkgrlm» при декодировании станет «шифрованием». .

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

Языки
=========

Чтобы предоставить решение Python, отредактируйте файл solution.py
Чтобы предоставить решение Java, отредактируйте файл solution.java.

Тестовые примеры
==========

Входные данные:
(строка) s = «wrw blf hvv ozhg mrtsg’h vkrhlwv?»
Выход:
(строка) «Вы видели вчерашнюю серию?»

Входные данные:
(строка) s = «Yvzs! I xzm’g yvorvev Lzmxv olhg srh qly zg gsv xlolmb!!
Вывод:
(строка) «Да! Не могу поверить, что Лэнс потерял работу в колонии!!

Используйте проверку [файл], чтобы протестировать свое решение и посмотреть, как оно работает. Когда вы закончите редактирование своего кода, используйте submit [файл], чтобы отправить свой ответ. Если ваше решение пройдет тестовые случаи, оно будет удалено из вашей домашней папки.

Так совпало, что я недавно создал приложение для шифра сдвига, и эта проблема сразу напомнила мне об этом. Подробнее о шифре сдвига читайте здесь:



Расшифровывать нужно только строчные буквы. Остальные символы остаются без изменений. Во-первых, создайте словарь для хранения закодированных символов и их расшифрованных аналогов. Затем используйте цикл for для перебора каждого символа во входной строке. Если символ в нижнем регистре, извлеките его расшифрованное значение из словаря. Если нет, добавьте символ в строку ответа.

На мой взгляд, эта задача была разработана для проверки знаний участника о типах данных str и dict и их встроенных методах.

Вывод 📌

Я планирую продолжить описание своего путешествия по Foobar и подробно описать, как я решал проблемы, в следующих статьях. Следуйте за мной, чтобы узнать больше о вызове. Кроме того, все отзывы приветствуются. Я всегда стремлюсь узнать новые или лучшие способы ведения дел. Не стесняйтесь оставлять комментарии или обращаться ко мне по адресу [email protected].