Блог компании Юла

Л-логика! Нескучный тест на скорость для мобильных разработчиков

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

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

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

        Так же рассчитал, удивился, когда написало: неправильно

          +1
          Я также посчитал. Авторам минус.
            0
            1 переворот — это самый очевидный ответ.

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

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

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

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

              • кошмарный UX/UI, такой я видел только у ваших соседей по офису — Mymail,
              • уродский механизм монетизации путем включения в сервис обилия рекламы,
              • более чем странные механики продвижения с бонусами.

              И это только то, что на поверхности. На месте парней шарящих в мобильной разработке — я бы скорее на Авито обратил внимание.
                0
                Вопрос про шапки

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

                                          0

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

                                            0

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

                                              0

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

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

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.