Foobar.withGoogle и удовольствие от решения проблем

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

Все началось с попытки подключить Headless Chrome к WebdriverIO для моих тестов Selenium.

Когда я искал документацию в Интернете, чтобы узнать, сделал ли кто-нибудь подобное (а они этого не сделали), мои запросы вызвали Foobar, соревнование по кодированию, созданное Google.

Я спустился в кроличью нору.

О, места, куда ты пойдешь…

Задачи усложняются от уровня к уровню, и вам дается ограничение по времени на выполнение и отправку.

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

По вечерам я просматривал свои учебники по алгоритмам и просматривал ссылки на Python в Интернете, набрасывая на бумаге и на доске подходы к решению задач.

Я ложился спать, когда колеса медленно сворачивались, и просыпался, когда они снова ускорялись, чтобы начать рубить подходы, которые не сработали, как ожидалось.

Связь с моим братом…

В конце концов я столкнулся с проблемой, когда я перешел от решения O(n³) к оптимизированному подходу O(n²). Я сократил количество выполняемых вычислений до минимума, и все же время, необходимое для проверки моего решения на тестовых примерах, превышало лимит. Оставалось 2 дня, 5 часов, мало секунд, а время тикало.

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

По пути я прихватил пирожных.

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

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

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

Мы обновили файл решения на Foobar и проверили. Подтверждено.

Я сказал ему: "Вас следует нанять в Google! Вы решили эту проблему примерно за 40 минут", на что он ответил: "Вы сделали 80 % работы, я только что заполнил ту часть, которую вы пропустили.

— Разве это не было весело, Джон? Эти головоломки такие крутые»

Да, было. Все было как в старые добрые времена».

"Ага."

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

Покидая Валгаллу…

Прошло пару дней, и я был действительно озадачен следующей проблемой. Я перешел от наивного O(n³) к O(n²) и, наконец, к решению O(n). Сладкий черт.

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

Существует команда deleteme, которая стирает все ответы и информацию, собранные во время Foobar. В какой степени? Я не знаю. Но я использовал его.

Появился таймер.
«Самоуничтожение через 6…5…4…3…2..1»

Я был за пределами Валгаллы и теперь не мог войти.
Может быть, однажды меня снова выберут. Это было бы здорово.
Может быть, я смогу разгадывать забавные головоломки, крутить колеса, тренировать свой мозг, пока мне не нужно будет обмениваться идеями с братом, а нам придется отсидеться крыльцо, чтобы все обдумать.

После решения я, вероятно, заставлю его самоуничтожиться.