Как стать автором
Обновить

Где порешать реальные задачи для кандидатов в Яндекc: тренировка на Codeforces и разбор

Время на прочтение43 мин
Количество просмотров73K
Всего голосов 54: ↑40 и ↓14+26
Комментарии34

Комментарии 34

А на сколько времени эти задачи расчитаны? Понятно, что «в течение недели» оно может быть теоретически любым, но какое время вы изначально заложили как оптимальное?
Под задачи закладывается 6 часов (при этом, чтобы пройти отбор можно решить не все задачи). В течении недели нужно выделить эти 6 часов, на решение. После окончания 6 часов со старта, доступ к задачам блокируется.
Раз всё так строго, то что тогда оценивается выше, «качество» выполнения (производительность, оформление кода, «стандарты») или количество решённых задач (при условии, что все решены корректно)?
Так как проверяется всё автоматически, то задача считается решённой если она не только даёт правильный ответ, но и так же укладывается в ограничения по времени и по памяти. После этого оценивается количество решённых задач.
Как в представленных решениях на Java соблюдается ограничение по памяти? И по скорости тоже. На скорость выполнения не влияют аппаратные характеристики?
Судя по предложенным решениям «оформление» либо проверяется в последнюю очередь или вообще не проверяется.
  • typedef вместо using;
  • фиксированный char[] вместо std::string (в данном случае на всяких cnt, tens и т.д. скорее всего SSO сработает);
  • malloc вместо new;
  • использование C заголовков, а не C++ (например math.h, а не cmath);
  • если уж было желание использовать scanf / printf, то нужно применять cstdint (а не typedef'ить до ll, что вообще не читаемо) и PRIxN / SCNxN из cinttypes;

и так далее.

Судя по конструкциям типа sys.stdin.readline() и std::cin.sync_with_stdio(false) — это код от любителей хардкорных контестов с жесткими лимитами)

Увы, в этом есть необходимость, ибо получится не очень хорошо, если кто-нибудь будет успешно сдавать неоптимальное решение только из-за того, что он много сэкономил на быстром вводе. К тому же все авторские решения проходят с двойным запасом времени и памяти
Видимо запас хороший — память в решениях на C++ не очищается. Ну и кодом на C++ это можно назвать с большой натяжкой. Какой смысл выкладывать write-only код? Например, решение задачи F: двадцать хедеров (половина из них почему-то Сишные, а не C++ эквиваленты), используется один, дефайны, тайпдефы и пр. Да, понятно, что так пишут, копипастя шаблон и не задумываясь, но можно было бы, ИМХО, причесать код, чтоб его можно было прочитать.

PS. А на фото Ваня?
А на фото Ваня?

Да, это ivan_puzyrevskiy.

По опыту собеседований в FAANG и сайтов типа hackerrank ваши задачи, особенно первая, слишком перегружены предметной областью. Нужно реально много времени чтобы даже просто прочитать условие. Описание должно быть короткое, некий кейс, откуда человек должен понять класс задачи (BFS, LCS, permutations and etc.) и успешно применить теорию в виде кода. Зачем мне, как соискателю, тонна информации про Васю-Петю-Машу?

Судя по уровню Вашим статьям, которые я понял дай-бог процентов на 40, Вам ни не нужна информация о В-П-М, ни Yandex)

UPD для минусующих сотрудников Яндекса: против Яндекса ничего не имею и даже наоборот, однако не смог удержать при себе свое ИМХО

Спасибо! Кстати, я собеседовался в Яндекс (в Новосибирске), примерно во времена написания тех статей, лет 8-10 назад. Не взяли)) Я действительно рад, что в нашей стране есть компания такого уровня, но вот по форме собеседований… Лично мое мнение, способность быстро проводить собеседования — это круто. Да, Яндекс может себе позволить проводить 5-и часовое собеседование (у меня было так) с задачами, специфичные алгоритмы, детали устройства ОС (Рихтер отдыхает) и процессоров. Нереальный объём информации. В мире есть немало компаний, тоже весьма высокотехнологичных и успешных, которые «мучают» на собеседовании гораздо меньше. Т.е. они каким-то образом смогли сделать более эффективный «экспресс-тест».

может для того чтобы проверить насколько вы хороши в бизнес-анализе? мне в иностранную компанию попалось задние рассчитать систему зеркал для аттракционов :D:D:D

Этот подход к формулированию задачи, своего рода, калька с задач для школьников не «постсоветского пространства». Возможно, автор задач учился именно в такой школе. У меня есть возможность непосредственно видеть то, как ставятся задачи по математике и физике для австралийских школьников. Тут почти нет абстракций даже на уровне выпускников школ. Все на примере «из реальной жизни». В младших классах, например, состав числа практикуется на монетах и купюрах. А проценты сразу рассматриваются с точки зрения кредитов и депозитов.
Если выкинуть «литературу», то учебники похудеют в половину.
Это может показаться немного странным, но, с другой стороны, все полученные методы и алгоритмы решении сразу оказываются привязаны к тем или иным конкретным жизненным «бизнес-кейсам».

начал читать про ингредиенты и пустил скупую мужскую слезу — всё это делал когда писал систему управления бизнесом для мороженого — автоматический расчёт себестоимости, рецептур… а потом поймал себя на мысли что быстрее других я бы эту задачу всё равно не решил

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

Уважаемый Яндекс, надо собеседование менять, а не пытаться вот такими вот попытками завлечь к себе людей.
А что не так с собеседованиями, если не секрет?

Имеют мало общего с реальностью к примеру?) Как та картинка — "спрашивают про красно-чёрные деревья, а на деле править конфиги докера") Суть та же)

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

Ну и конечно, на собеседованиях ещё спрашивают что-то про знание языка. И в конце концов на собеседовании уже в команду (а не в весь Яндекс в принципе) обсуждаются реальные задачи, которыми придётся заниматься.

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

Или вот никогда не понимал такое. В чём сложность в каждой команде или в группе команд иметь человека который супер-пупер в алгоритмах? Т.е. если появляются такие задачи сразу идти к нему и он выдаст наиболее качественно решение за короткое время.
Т.е. искать людей по специализации: хороший бекенд, фронтенд, мобильный разраб, алгоритмист-математик.
В наше время доступной информации очень сложно на практике сделать откровенно хреновый алгоритм если он известен(он либо встроен куда-то, либо гуглится), а если не известен — вот для этого и будет специальный человек.

А почему каждый разработчик в команде не может быть хорошим специалистом? Программирование это вообще про алгоритмы и сложность, и любой программист должен как минимум неплохо разбираться в том, что такое сложность, о-нотация, и уметь выбирать и/или генерировать подходящий алгоритм

По той же причине, почему редко один человек делает одновременно бекенд и мобильную разработку, одновременно iOS и Андроид, или занимается одновременно hardware и раскрашиванием кнопочек на UI.
Алгоритмы — та же специализация.
Смысл в нескольких хороших, если один крутой затмит всех остальных и сделает однозначно лучше? Зачем 5 бекенд разработчиков, которые немного умеют в мобилки. Может лучше плюс пару мобильных разработчиков, которые уже 10 лет этим занимаются? Думаю смысл понятен:)
И программирование и разработка уже не идентичные понятия всё таки.
Разработка это уже не только про "алгоритмы и сложность".

Алгоритмы это всё ещё не специализация. У вас же нет специализации по типам данных, например? Вася пишет код, который работает со строками, Коля — с числами
Понимание алгоритмов, способность оценить их сложность одинаково важна и в бекэнде, и в мобильной разработке, и во фронтэнде. Иначе получаются монстры, которые десятками секунд отрисовывают интерфейс в браузере и высаживают аккумулятор на мобильнике

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

А можете ткнуть в то, что делает задачи из поста специализированными? Может, какой-то очень хитрый алгоритм надо разрабатывать или знать? Вроде всё на уровне тех самых базовых знаний, ну ещё требуется способность думать, но это ведь тоже не специализация

Ну кроме как для А — да.
Да в задачах надо разработать хитрые алгоритмы, надо каждый день работать с деревьями, графами, иметь механический опыт алгоритмов gcd/lcm, обхода вершин графа.
Прибавьте в к этому стресс + ограниченность времени.
Способность думать вообще — не специализация, а способность думать в конкретной области — специальный навык.

6 часов это много, мне кажется. Сложно назвать это ограниченностью во времени
Если человек не может за шесть часов придумать алгоритм, может действительно не стоит его нанимать на позицию программиста в компанию, которая стремится пылесосить бойцов получше?

Два пункта:

1. Эти задачки не проверяют ничего, кроме того, что кандидат озадачился литкодом. И да, потом он продолжает перекладывать JSON'ы, только в яндексе.
2. Средний человек видит это, и с очень большой вероятностью сразу думает «ну его к черту».
Вася, Дима, Егор, Алексей… Как-то не очень с diversity :)
Задачи перегружены мелкими и ненужными деталями. Пример:
В одном килограмме 1000 грамм и в одном литре 1000 миллилитров.


А разве бывает как-то по другому? 1024 грамма? О_о

И еще вопрос не дает покоя: это задачи для стажеров,- то есть даже не джунов. А какой смысл спрашивать про чанки или ранжирование выдачи, если стажера ни к тому, ни к другому даже близко не подпустят? Не, ну правда: алгоритмы это прям здорово, но 95% задач (вакансий) в Яндексе этого же не требуют… Зачем тогда?
Вот мне интересно постановка реальных задач на работе в Яндексе выглядит так же запутанно как постановка данных задач? Без пол литра не разберешься чего от тебя хотят, а пока дочитаешь условие до конца, забудешь, что было в начале. Так и задумано? Вы какие навыки хотите проверить?

Понятно, что алгоритмы — это полезная здоровая вещь, и я поддерживаю, что их нужно спрашивать на собеседованиях, но Ваш формат конкретно в данном примере — это оверкилл. На мой взгляд, составителям задач стоит подумать о том насколько понятно и лаконично они пишут описания к задачам и в целом продумывают задачи. Хорошие примеры можно посмотреть на leetcode top 100 liked questions
Зарегистрируйтесь на Хабре, чтобы оставить комментарий