Блог веб-разработчика v 1.0.0
Symfony2, AngularJS, React, Gulp, PhpStorm и много других страшных слов

Участие в разминочном раунде Яндекс.Алгоритм

A long time ago

Около месяца назад коллега рассказал мне о проведении ежегодного конкурса Яндекс.Аглоритм. Почему бы не поучаствовать? Ехать никуда не надо, по крайней мере на первых этапах. Время проведения тоже адекватное - 21:00. Решено - участвую!

В данном конкурсе нет четкой привязки к языку программирования, напротив, вам даже дают выбрать на каком языке писать и даже разные задания можно писать на разных языках. Но вот веб-языков в списке нет. Как мне сказали в поддержке, это связано с их медлительностью и я ну никак не уложусь в лимиты памяти-времени для каждого задания. Ну что, хорошо, Python, я выбираю тебя!

Как всегда, я планировал тщательно готовиться, хотя бы потому, что о языке Python знаю чуть больше чем то как он называется. И вот наступило 16 мая, пришло напоминание о проведении конкурса. Пора бы начать готовиться...вот сейчас последнюю серию этого аниме досмотрю и буду что-то делать. И еще одну. И последнюю. Ну, готовиться уже некогда, пора начинать.

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

Приступим к Яндекс.Алгоритм

Вот оно первое задание A. Чёрные начинают и... и вроде бы ничего сложного. Нужно просчитать ситуацию для черных на шахматной доске при наличии на ней белых короля и ладьи и черного короля. С чего бы начать? Наверное с того, как в Python считывать stdin (на столько глубоки мои познания в этом языке, ага).

Спустя минут 40 мучений (по большей части с Краснодарской Yota) из отведенных 100, готово первое решение....а нет, не готово, валится на третьем тесте. Наверное не обработал какую-то ситуацию на доске? Так, чуть поправим и еще раз...снова только два теста успешны. Еще и входные данные не показывают, знать бы на чем оно валится. Вот уже нагуглена шахматная доска для наглядности, представим на ней три наших фигуры...вот оно! Черные король может "съесть" ладью, если она не прикрыта королем. Так, добавим обработку этой ситуации. Снова только два теста? Да что-ж такое то!

Спустя еще несколько придуманных ситуаций количество пройденных тестов не изменилось, а это значит, что даже первого задания я не сделал. Осталось всего 11 минут до конца разминочного раунда...да вот же оно! Ладья не может бить "через" своего короля, как я раньше не догадался? Успею, успею....да! Двадцать четыре теста пройдены, первое задание успешно сдано. Осталось пять минут до конца раунда. Как раз хватит на остальные пять заданий :)

Время подходит к концу и...и ничего. Перезагрузим страницу. Internal Server Error. Ну, с кем не бывает? Не протестировали ребята этот этап работы сервиса, бывает. Спустя еще какое-то время сайт заработал и появилась фраза, сломавшая мой мозг: Ваше участие в соревновании завершено. Вы можете отправлять решения. Можно было не торопиться в 100 минут? Я так и не понял, что это значит, но решил больше не отправлять решения, скорее всего их не засчитают.

А как же остальные задания?

Шаманы племён, обитавших в древности на территории нынешней Байтландии, практиковали следующий способ построения заклинаний.

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

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

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

Миша недавно узнал, что факториал числа n — это произведение всех натуральных чисел от 1 до n включительно. Мише понравилось вычислять факториалы маленьких чисел. Однако он быстро понял, что факториалы чисел, больших десяти, очень сложно вычислять вручную. Руководитель математического кружка, в котором учится Миша, узнал о его успехах и дал ему более сложную задачу: найти последнюю ненулевую цифру суммы k-х степеней факториалов целых чисел от 0 до n, где k — неотрицательное целое число.

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

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

Так ты прошел или нет?

Теоретически - прошел. Я успешно решил первое задание. Пусть за 95 минут из 100, но решил же, так что по условиям конкурса попадаю в отборочные раунды. И, кстати, почему бы не съездить в Берлин?

Что еще почитать