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

Впечатления от прохождения конкурса Яндекс «One Day Offer Frontend»

Время на прочтение 8 мин
Количество просмотров 20K
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 51

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

Любопытно, спасибо!

Ход конём сразу придумалось решить через чекбоксы, а вот про тени бы не догадался - пробовал бы через nth-child.. надо попробовать, получится ли)

Я просто офигел от красоты решения. Того, кто решит с нуля только эту задачу надо нанимать без разговоров!

Я решил. Ничего сложного. Просто у вас мало версточной практики. А вот задачи по js я не решил. У меня мало практики языка)

Я Ход конём как-то сразу через обычные кнопки с фокусом сделал, на мой взгляд короче, чем с чекбоксами. Вот до теней пришлось додумываться. Прикол у меня в другом был. Набрал 110 баллов, жду письма - его нет. Через три дня сам им написал, а они мне в ответ, мол Вы нам не подходите, тк на второй странице внизу второго экрана указано, что у соискателя должно быть минимум два года коммерческой разработки (я в свои 38 - любитель, только решил встать на путь коммерциализации). Такие дела...

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

Посылаю лучи поддержки. С вашим уровнем уверен, легко найдете достойную работу.

Серьезно? Вы с HR'ами видимо мало общались, молчать в случае отказа, а порой и долгого фидбека это их кредо

Для флаттена всё стандартно - прикинуть рекурсивный вариант и развернуть его на цикл+стек. И главное никаких спредов и конкатов - только православный push в массив-результат.

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

Превращение в строку и обратно - это тупиковая стезя, думаю даже не надо расписывать почему.

А то что я предложил, это как раз без рекурсии, примерно так

Кодъ
function flatten(arr) {
    if (!Array.isArray(arr)) {
        return arr;
    }
    const stack = [{arr, i: 0}];
    const result = [];

    outer: while (stack.length) {
        const ctx = stack[stack.length - 1];
        while (ctx.i < ctx.arr.length) {
            const value = ctx.arr[ctx.i++];
            if (Array.isArray(value)) {
                stack.push({arr: value, i: 0});
                continue outer; // типа рекурсивный вызов
            } else {
                result.push(value);
            }
        }
        stack.pop();
    }
    return result;
}

Можно проще:

return arr.flat(Infinity)

Круто! Но думаю рекрутер хотел чтобы я написал аналог flatten, а не использовал flatten из коробки 😜

Разумеется, нет.

function depth(n) {
    for (var r = 1; n > 0; --n) r = [ r ];
    return r;
}
depth(100000).flat(Infinity); // Maximum call stack size exceeded

Да, запретили использовать рекурсию (или функции из коробки, использующие рекурсию), т.к. есть техническое ограничение на макс вызов кол-ва функций в js/браузере: https://stackoverflow.com/questions/7826992/browser-javascript-stack-size-limit

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

за статью спасибо, отличное получилось описание!

Тем не менее желающих полно и своего человека/людей они найдут.

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

Тут все просто, не стал заморачиваться, регулярка, 2 минуты, 5 баллов в кармане.

А почему не цикл + мапка? Вроде ж даже проще.

есть свой виртуальный Гит

Если быть чуть более точным, это git-like VCS под названием Arc: https://habr.com/ru/company/yandex/blog/482926/

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

Цикл по буквам и считать сколько вхождений? Образец может быть и многобуквенным. Плюс при своем алгоритме могли быть сюрпризы вида "ищем АБА в слове АБАБА" и получать ответ 1 (правильно) или 2 (неверно) если накосячить в цикле. Лучше решение из коробки. Ну или это я ленивый.

Да, верно ARC про него говорили.

Видимо я спутал задачи по названию, так как в описанном мной случае ищется не подстрока в строке. Либо вы про UTF-8, где один видимый "символ" занимает больше одного char.

Видимо я вас недопонял. Речь про задачу определения числа вхождений образца в строке. Я решил ее так:

function countSymbol(str, symbol) 
  var regex = new RegExp(symbol, 'g');
  let result = (str.match(regex) || []).length;
  return result;
}

Не совсем понял вашу идею, как решить эту задачу через цикл (for?) и мапку (arr.map(item => {})?)

A. Подсчитать количество вхождений символа в строку [5 баллов] 

Тут все просто, не стал заморачиваться, регулярка, 2 минуты, 5 баллов в кармане.

Я вот про эту задачу. Тут как то непонятно из названия, что речь про поиск подстроки в строке, а не подсчет вхождения символов.

Кстати, если там конкретный символ надо оподсчитать, а не все - то и мапка не нужна.

Да, май бэд. Речь о символе, видимо одном, а не подстроке. Вы правы, можно решить это проще.

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

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

Звучит как плохой совет

Согласен. Но когда голова дымится, а до конца соревнования остается пара минут, а нужный порог баллов еще не набран уже не до моральных соображений.

Это давняя проблема всех олимпиад по программированию. Даже на школьном Всеросе раньше были задачи, где программа должны была вывести один из двух ответов (условно да/нет), и можно было просто написать код из одной строчки (всегда вывод одного ответа) и набрать половину баллов.

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

Но у Яндекса на позицию полноценного разработчика, видимо, все в этом плане не так продвинуто, как у школьников на олимпиаде

Да, думаю Яндекс пофиксит этот баг.

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

  • проверяется надёжность написанных тестов: проверяют ли они хоть что-то;

  • когда код написан по TDD, тесты, даже при отсутствии кода будут вести по цепочке реализации, поскольку качественные тесты - это знания о работе системы;

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

  • задействуя 20% усилий мы получаем 80% результата, и я сейчас не столько о 15 баллах, сколько о том, что за пару секунд мы получаем рабочий прототип решения;

С последней задачей, у Вас, конечно, косяк совсем вышел, базовый обход дерева, только без рекурсии :( И все равно вам как-то захотелось написать рекурсивно или красиво, а если бы в тупую побольше переменных, то получилось бы лучше :)
Спасибо, что поделились!

Да, есть такая проблема. Всегда хочется написать короче и красивее, а не сложнее, но эффективнее.

После такой работы и появляются статьи "я выгорел на работе".

Да, ребята из Яндекса выглядят замученными (судя по знакомым и не очень). В таком олимпиадном режиме попраграммировать - выгоришь через неделю.

Не только программировать, в яндексе много направлений...

Кто постарше, отказываются от предложений яндекса, даже за хорошую ЗП.

Удел молодых, пока энергии больше, чем здоровья.

У них эта олимпиада забагована словно её составлял какой-то джун. Во первых в тексте задания кривые ссылки на примеры решений, то есть по ним открывается что-то совсем не то. Во вторых у них проблема с автоматической проверкой решений, сделав первое задание (свг рисунок планеты) их система мне сообщало что ответ не верный, хотя всё соответствовало условию задачи.

Меня прям расстроил кейс (тестовая задача D генерация скобочных последовательностей), когда написал правильное решение и прошли корректно 13 из 14 тестов, а последный тест вылетел с Memory limit и все решение считается неверным 😳

У меня было так (в яндекс не собирался, поэтому не применял гугление задач и не делал попытки читерить получая баллы за однострочные решения):
1. По-быстрому решил вводную задачу на 5 баллов.
2. Ход конем пропустил, т.к. знал, что это для меня надолго.
3. Принцип одного окна. Сделал, дали около половины баллов, т.к. часть тестов "wrong answer". Почему так - мне никто не сообщил.
4. Слишком надежный проект - отложил
5. Вот тут у меня пригорело знатно. Вроде понял что к чему и как делать, но из-за формулировочек + собственно

Простите, не дописал (на модерацию ушло после мисклика)
5. Сам, конечно, дурак. Но, в итоге, решил, немного не уложившись по времени. Прошли все тесты, но поставили по 0.01 балла за каждый

Дальше была возможность порешать задачи вне конкурса, уже вечером решил про ход конем, сделал сабмит и мне дали максимальное количество баллов (баг1), после этого сел решать задачу 4, попытался засабмитить, но тут меня вообще выкинуло из соревнования: даже вне конкурса нельзя было проверить решение (баг2). В общем, впечатления смешанные. С одной стороны, достаточно интересные задачи (3 и 5 понравились). С другой стороны, совершенно неудобная система проверки: если ошибка рантайма, то можно было бы и написать какой-то текст, потому как с правильным решением вылез за лимит времени из-за того, что долго не мог понять, что данные не в том виде отдаю.

НЛО прилетело и опубликовало эту надпись здесь

Ну, так себе совет 😬 Да и в реальной работе (без друга программера рядом) это быстро всплывет, только время зря потеряешь. Вообще, отзываю свой совет, что нужно готовиться к таким соревнованиям. Т.к. если без подготовки и стимуляторов не можешь каждый день фигачить без выгорания и овертаймов на олимпиадном уровне, нет смысла подаваться на такие вакансии.

А почему вы думаете, что вам придётся в Я заниматься ровно этим же ровно в таком же темпе 8 часов 5 дней в неделю? Это соревнование. К соревнованиям готовятся, "тужатся" в течении короткого времени иии всё, соревнование закончено. Вы же не думаете, например, что человек, который способен пробежать марафон, бегает марафон каждый рабочий день?

Да, вероятно, вы правы. Это скорее у меня было понимание (возможно, ошибочное), что на собеседовании в любой компании задают вопросы и проверяют те скилы, которые непосредственно будут использоваться каждый раб день конкретным сотрудником. Глупо проверять навыки программирования, скажем, у продажника. Или нанимать на должность секретарши девушку с красным дипломом МГУ. О, Боже, именно такой пример в Яндексе я и знаю! 😜

Не на пустом же месте устоялось мнение, что на собеседованиях в крупные конторы приходится решать олимпиадные задачи всех сортов, а непосредственно на работе — json'ы перекладывать из http-сервиса в http-сервис.

Ну, наверно, это правильная стратегия. Т.к. если у тебя в HR воронке на позицию пришли 100 кандидатов и надо быстро выбрать 2-3, их пустить на исп срок и оставить одного, то фильтр по олимпиадным задачам - самое быстрое решение для отсева.

Тут по-разному можно смотреть. Можно как плюсы найти, так и минусы.

Часто участвую для разнообразия во всяких таких штуках. One day offer прошел в прошлый раз (пол года назад). В Тинькофф много раз проходил и ДР.

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

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

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

Дальше было интереснее, мне сделали оффер, все были очень вежливы, но оффер был очень маленьким. Трижды его повышали и очень уговаривали, но сумма в итоге просто дошла до моего текущего уровня это ещё и с условием rsu. В итоге, когда я сказал что меня не устраивает новый оффер, то hr просто перестал отвечать)

Крутой коммент! Жаль лайки у меня на сегодня закончились 😄 Да, с входными/выходными данными засада. Я был уверен, что 100% правильно решил задачу с модулями и списком тестов, но т.к. не было примера, что программа ожидает на выходе, так и не смог отладить функцию.

По зарплате тоже слышал, что Я набирает людей выше среднего уровня, а платит ощутимо ниже среднего по рынку, но дает акции, которые конвертируются в $ через 4+ лет работы. Т.е. если цель $, за ними надо идти в условный роснефтьгазмясметалл 😜

Да, зп меньше. Они ставят на то, что типа дают акции, которые ты получаешь не сразу, а в течение 4 лет. Но во первых, даже с ними это было бы ниже уровня моего чистого текущего дохода, я уже не говорю про всякие надбавки. Ещё в Яндексе по слухам переработки это норма. Но вот если вы разработчик с опытом 1-2 года, то возможно Яндекс очень хорош для опыта.

В далёком прошлом до ит я как раз работал в газ*** и там все таки зп ощутимо ниже чем в ит)

Да, про адские переработки тоже слышал. У одного из ведущих мероприятия (сотрудник Я - А.В.) были черные от недосыпа глаза и заторможенная речь как у робота. Ну или мне так показалось.

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

Насчет нефтянки. Щас П их нагнул, они стали некислые бюджеты жечь на всякие инновации, цифровизацию, импортозамещение, создание цифровых двойников месторождений, дроны, AI/ML и др. Гуглим Сибинтек и аналоги. Отличные там щас ЗП в ИТ 😇

Т.е. если цель $, за ними надо идти в условный роснефтьгазмясметалл 😜

Нет, нужно хорошо подтянуть английский язык и устраиваться в зарубежные компании (обычно из США). Можно вполне найти и варианты удаленной работы, после ковида это стало намного проще, чем раньше

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

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории