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

Comments 42

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

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

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

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

Ваше решение более верное, так как использует только факт общего количества времени в каждых часах, без применения «трюка» с переворотом больших часов на 1/7 пути.
Спасибо, я справился.
Только почему тест на логику и разработку для мобильных, с названием термина mobile-first для веба?
UFO just landed and posted this here
Вопрос про шапки

Легко решается такими невнимательными людьми как я, достаточно не обратить внимание на "или поворачиваться", тогда 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, чтобы сказать какого у него.

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

Так ведь речь идёт только про ситуацию, указанную на картинке, а не про все возможные варианты распределения шапок.
UFO just landed and posted this here
А как понять, за какое время решил? В моём случае «решил» )

Я начал решать вечером, а утром разблокировал телефон и увидел остатки теста. На таймере было 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)

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

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

В задаче про монеты несовсем понятно, мы в один момент можем переворачивать только одну монету, или несколько, или все одновременно?
Мы можем переворачивать как угодно, но количество переворотов считается для каждой монеты отдельно.
Sign up to leave a comment.