Как стать автором
Обновить
Привет, Хабр! Мы Юла, mobile-first сервис объявлений с аудиторией более 27 млн пользователей. Мы ценим скорость и нестандартные задачи, а прямо сейчас ищем себе в команду бойцов по направлениям мобильной разработки iOS и Android. Под катом — наш тест со сложными и не очень задачками на логику и профильные знания. А для того чтобы добавить драйва и оборотов (мы же Юла), мы снабдили тест таймером. Делитесь вашими результатами в комментариях.
Гоу разомнёмся?
Всего голосов 26: ↑25 и ↓1+24
Комментарии42

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

Песочные часы
Хм, а если так?
Запускаем отсчёт часами одновременно.
Как только маленькие часы отмеряют 4 минуты мы тут же их снова переворачиваем. В больших часах останется песка на 3 минуты, по истечении которых в маленьких часах песка останется на 1 минуту. В этой точке мы начинаем отсчёт 9 минут. После этого ещё 2 раза перевернуть маленькие часы. Итого 1 поворот, погрешность времени будет минимальна, хотя всё же будет из за поворота часов и способ не особенно удобный
И я такой алгоритм использовал. Большая беда таких тестов — уверенность авторов в однозначности ответа.
Я также посчитал. Авторам минус.
1 переворот — это самый очевидный ответ.

Маленькие часы: 4 x 4 минуты = 16 минут
Большие часы: 1 x 7 минут = 7 минут

16 — 7 = 9 минут
Хотя обычно песочные часы изготовляют с частицами одного размера, в общем случае (например, если мы сделали их кустарно на необитаемом острове), это может быть не так. В результате, песок может сыпаться неравномерно, поэтому решение авторов вопроса в общем случае неверное.

Всё, что мы знаем о данных песочных часах — что весь песок в них пересыпается за 4 или 7 минут.

Ваше решение более верное, так как использует только факт общего количества времени в каждых часах, без применения «трюка» с переворотом больших часов на 1/7 пути.
У этого теста явный ANR.
Спасибо, я справился.
Только почему тест на логику и разработку для мобильных, с названием термина mobile-first для веба?
НЛО прилетело и опубликовало эту надпись здесь
Вопрос про шапки

Легко решается такими невнимательными людьми как я, достаточно не обратить внимание на "или поворачиваться", тогда C видит ребят с двумя белыми шапками, а зная, что разработчиков 4 (в задаче не сказано, что разработчики не знают) сразу становится понятно, что с белой шапкой разработчиков больше нет, значит С с черной.

Задача про шапки
Задача сформулирована некорректно и неоднозначно. В решении предлагается следующая логика: участник C, видя только шапку впереди может сказать правильный ответ, только при условии что шапки надеты поочередно. А если у A и B шапки одного цвета, а у C и D другого? В таком случае C и D ответить не сможет.

Почему не смогут? D будет также молчать, т.к. видит только две шапки разного цвета. Это понимает C и по шапке B называет свой цвет

ну и как же C назовёт свой цвет?

A — черная
B — черная
C — белая
D — белая
или
A — чёрная
B — белая
C — белая
D — чёрная
В вашем втором случае D сразу же мог бы назвать какого цвета его шапка, а по условию он как минимум минуту молчит. Значит шапки В и С разного цвета.
Вы не можете суть понять. Или я туплю. Хорошо, у B и C шапки разного цвета. Но как C узнает какая шапка у D, если у D может быть как белая, так и чёрная шапка. Нет никакой определённости
Edit: хм, а какая разница какого цвета шапка D, если C знает, что у него и B разного? Он же видит B, значит у него противоположного и на этом все.

В условиях указано: шапок четыре, белых и черных поровну, то есть по две штуки. D видит две. Если они одинаковые, значит остались (в том числе у него) только противоположного цвета и он сразу говорит какого. Так как он молчит, значит те, что он видит (B и C) — не одного цвета. Если B и C не одного цвета, то C вполне достаточно цвета шапки B, чтобы сказать какого у него.

ЕМНИП в ответе ровно это и было написано.
Разработчики на своих местах сидят строго как показано на рисунке, они не могут перемещаться или поворачиваться.

Так ведь речь идёт только про ситуацию, указанную на картинке, а не про все возможные варианты распределения шапок.
НЛО прилетело и опубликовало эту надпись здесь
А как понять, за какое время решил? В моём случае «решил» )

Я начал решать вечером, а утром разблокировал телефон и увидел остатки теста. На таймере было 18:42. Так что время тут вряд-ли считается вообще

7 из 12 при том, что я не знаю абсолютно ничего о разработке под Android. Хороший тест.
Супер 5\12. Причём провалены задания по алгоритмике, а по коду ошибся только в логах отладки.
И да, последний раз я писал код года два тому назад, на VBA. А если не на VBA, то лет 25 тому назад.
Если так проходят собеседования… Тряхнуть что-ли стариной, пойти поработать синьором в IT? :)
все задачи на логику содержат условие с подколом, а «задачку Эйнштейна» ошибочно причисляют к Эйнштейну, хотя никаких пруфов нет.
Задачу с часами решил просто подобрав числа для уравнения 7x — 4y = 9. (21-12 = 9)

Задача с шапками в общем-то уже классика. Часы со стрелками, монетки… Элементарно.

Что мне не понравилось — так задача Эйнштейна. Когда-то я её делал (классе в девятом) и запомнил что на неё надо немало времени потратить. Ткнул наугад.
Мужчина покупает в магазине товар стоимостью 200 рублей. Не имея мелких денег, он дал продавцу купюру в 1 000 рублей. За разменом продавец обратился к своему коллеге из соседнего магазина (отдал соседу купюру в 1 000 рублей и получил ту же сумму мелкими). Так покупатель получил свою сдачу.

На следующий день второй продавец понял, что купюра фальшивая. Считая первого продавца виноватым, он пришёл к нему и вынудил обменять фальшивку на настоящую купюру.

Сколько денег в итоге потерял первый продавец?


200 – стоимость товара оплачена фальшивыми.
800 – сдача за товар настоящими.
1000 – компенсация фальшивых денег коллеге.

2000 получается.

Даже если считать, что себестоимость товара 0 рублей, всё равно получается 1800 (800 сдачи настоящими и 1000 компенсации коллеге).

Как же так 1000 получилось?
я посчитал как 1200...1000 вернул другу и 200 недополученная выгода. товар ведь ушел и прибыли за него нет.

Про друга вообще можно забыть, это специальное усложнение. Предположим, сдача у вас была, а поддельную купюру у вас конфисковали в банке, спасибо, ментов не вызвали.
Вот и получается, что взамен на фальшивую тысячу вы отдали уроду 800р. сдачи и на 200р. товара. Итого — потеряли 1000р.

Ну так отдали и другу и уроду, а это две тысячи.
Хотите, чтобы был друг — окей.
Продавец получил 1000р. от покупателя, баланс: +1000р. Разменял у друга: баланс всё ещё +1000р. Отдал товара на 200р., баланс: +800р. Отдал сдачу 800р., баланс по нулям.
На следующий день приходит друг, заставляет обменять фальшивку на настоящую купюру, баланс: -1000р. (плюс фальшивка, которая ничего не стоит)
Потеряли 1000р.
Вы правы. Спасибо, теперь понятно в чём была моя ошибка.
Продавец получил 1000, в кассе теперь 1000, разменял у друга, отдал товар за 200 и сдачу 800, в кассе 200 (!!!!) как у вас баланс по нулям то становится???
Утром друг приходит, отдаёт фальшивку и забирает 200 из кассы и 800 из кармана. Итого мы наличными отдали 1000 и 200 товаром покупателю. Значит потеряли 1200 рублей.
отдал товар за 200 и сдачу 800, в кассе
200 (!!!!) как у вас баланс по нулям то
становится???
Очень просто. Пришли утром, открыли магазин. У нас есть деньги в кассе и товар на полках — те же деньги.
Если мы продаём предмет за 200р., то отдаём его покупателю (-200р.), а он нам взамен платит его цену (+200р.)
ок, суть вашего умозаключения с балансом деньги/товар равными нулю я понял, но вот ваше «баланс: -1000р. (плюс фальшивка, которая ничего не стоит)» содержит ошибку, так как еще минус товар на 200р, так как товар он отдал, а денег за него не получил, так что всё равно -1200.
в финале перечисляем всех участников и записываем их приход и расход:
мошенник: приход товар на 200р, расход 0
продавец: приход 0, расход товар на 200р + 1000р соседу
сосед: приход 0, расход 0

Я вас понял. Чтобы не ходить по кругу, ответьте, пожалуйста, на два вопроса.
Вот, предположим, в магазин зашёл мошенник, взял товар на 200р., дал фальшивую тысячную купюру, получил сдачу 800р. и был таков.
Сколько потерял продавец? Сколько приобрёл мошенник?

хм, вот уже интереснее. давайте посмотрим.
1) мошенник — унёс 800р сдачи и 200р товаром = 1000р, что эквивалентно номиналу фальшивой купюры
2) сосед — разменял фальшивую купюру, но её стоимость возместил = 0р
3) продавец — отдал реальными деньгами 800р сдачи и 200р товаром = -1000р
— фуф, спасибо за помощь.
Обмен фальшивой купюры на мелкие настоящие и покупка это два независимых события. Сначала произошла замена подделки на настоящие деньги, а потом уже покупка и сдача выполнялись целиком настоящими деньгами. В задаче справедливо отмечено, что покупка вообще ни при чем, с тем же успехом покупатель мог просто попросить разменять купюру.

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

Относительно часов, кстати, есть часы, где часовая стрелка переключает час не плавно за минутной, а шагово — когда минутная стрелка пересекает границу 59-00. Так что не уверен, что вне контекста ответ в 0 градусов некорректен

Продолжая обсуждение вопросов — а кто-то вне Java до сих пор вообще использует Handler? Мне казалось, для него один раз пишут lambda обвязку и используют её, а в случае с котлином и вовсе launch(Dispatchers.UI)

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

Понятное дело, что это из разряда придирок, но конкретно такие вот задачи ставят в тупик, потому что они превращаются из задач на логику в задачи на "а угадаю ли я, чего ждёт от меня экзаменатор"

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