22 сентября 2011 г.

Интересные вопросы на собеседовании - 2

Продолжаю вторую статью о задачах на собеседовании.
Советую не спешить, и не подглядывать в решения до того как попытаетесь найти решение сами, развитая гибкость ума еще никому не вредила. Предложите друзьям и коллегам найти решение, подавите их своим интеллектом многим из них тоже рано или поздно понадобится искать работу, вдруг пригодится.
Начнем с простого. У Вас есть 5 банок с таблетками. Каждая таблетка весит 10 грамм, кроме ядовитых, они находятся в отдельной банке и весят 9 грамм каждая. Используя весы, определите в какой банке ядовитые таблетки за одно взвешивание.
Решение...
Пронумеруем банки с таблетками. Из банки номер 1 возьмем одну таблетку, из второй - две, из третьей - три, из банки номер четыре берем четыре таблетки, и из банки номер пять - соответственно 5 таблеток.
Взвешиваем все таблетки вместе. Если бы у нас все таблетки весили одинаково, то общий вес был бы 150 граммов - (1+2+3+4+5)*10=150, значит, если вычесть из 150 тот вес, который показали весы, мы узнаем сколько девятиграммовых таблеток мы взвешивали. Допустим ядовитые были в банке номер три, тогда весы покажут 10+20+27+40+50=147 граммов. 150-147=3.
Человек хочет пройти через туннель для поездов. Он начинает свой путь в начале туннеля, и когда он пройдет четверть пути, то услышит, что сзади приближается поезд. Неизвестно - как быстро поезд едет, и на сколько он далеко.
Известно только вот что:
  • Если человек развернется и побежит назад, то он достигнет начала туннеля одновременно с поездом 
  • Если человек побежит вперед, то конца туннеля он также достигнет одновременно с поездом 
Считайте что человек ускоряется мгновенно и бегает с постоянной и одинаковой скоростью в обе стороны туннеля, поезд также едет с постоянной скоростью. Вопрос - на сколько быстрее движется поезд по сравнению с человеком?
Решение...
В этой задаче нет необходимости что-то вычислять, достаточно логического мышления, если человек пробежит четверть пути к началу туннеля, и встретится с поездом, то это значит также что когда он с той же скоростью (по условию) пробежит четверть пути к выходу из туннеля, поезд окажется у входа. В этот момент человек находится в середине туннеля, так как четверть он прошел и четверть пробежал от начала пути к выходу, а поезд находится в начале пути через туннель. По условию выхода они достигнут одновременно. Это означает что за то время пока человек пробежит половину туннеля, поезд проедет целый туннель. То есть поезд движется вдвое быстрее. Вот такой простой вопрос для собеседования.
В тюрьму поступили 23 заключенных, их встретил начальник тюрьмы и сказал:
- Сегодня Вы можете встретиться и обсудить план, но завтра вы будете отправлены в одиночные камеры и не сможете общаться. В тюрьме есть комната с двумя переключателями, обозначенными "A" и "B", каждый из переключателей может быть в положении "ON" и "OFF", я не скажу вам, в каком они сейчас положении. Переключатели ни к чему не подключены. С завтрашнего дня, время от времени, когда мне захочется, я буду выбирать одного из вас случайным образом, и отводить в комнату с переключателями. Заключенный должен выбрать один из двух переключателей и изменить его положение. Он должен обязательно переключить один из переключателей, он не может переключить оба. Затем он будет возвращен в камеру. Никто больше не войдет в комнату с переключателями, до тех пор, пока я не приведу туда очередного заключенного. Я буду выбирать заключенных случайным образом, могу выбрать одного и того же хоть три раза подряд, могу выбирать не по порядку. Однако, если хватит времени, каждый из вас успеет побывать в комнате с переключателями. В любой момент времени любой из вас может объявить что он уверен на сто процентов в том что все вы хоть раз побывали в комнате. Если окажется что это правда, то все вы получите свободу, если окажется что хоть один человек небыл в комнате ни разу, то я скормлю вас всех крокодилам.
Какая стратегия поможет заключенным выбраться на свободу?
Решение...
Пусть выключатель "B" будет использоваться для подсчета. Нужно выбрать одного заключенного, который будет вести подсчеты.
Положение "ON" выключателя "B" будет означать "Да! Я уже был в этой комнате!". Если заключенный входит в комнату, и выключатель "B" находится в положении "OFF", и заключенный никогда не изменял положение этого выключателя прежде, то он переключит его, чтобы пометить что он уже был в комнате. Если он входит в комнату, и выключатель "B" находится уже в положении "ON", то заключенный не меняет его положения, он переключит выключатель "A", он не должен трогать выключатель "B", поскольку он указывает тому кто считает, что кто-то побывал в комнате впервые, а также указывает на то что считающий заключенный еще не учел появление в комнате нового человека. интервью Каждый раз, когда считающий зэк заходит в помещение и видит что выключатель "B" в положении "ON", он мысленно добавляет к количеству подсчитанных единицу, и сбрасывает "B" в "OFF", что дает возможность следующему впервые посетившему отметиться.
Когда считающий зек обнаружит что выключатель "B" 22 раза был в положении "ON" (сам себя с помощью переключателя он считать не должен), это будет означать, что все были в комнате хоть раз. Эта замечательная стратегия позволит им отправиться на корм крокодилам лишь в части случаев, ведь они не знают в каком положении был счетный переключатель изначально. Чтобы гарантированно избежать встречи с зубастыми, им нужно дважды отметиться в комнате, когда считающий заключенный досчитает до 44, это будет означать что каждый был в этой комнате по крайней мере один раз, независимо от начального положения "B".
Задачи на поиск очень любят спрашивать на собеседованиях фирмы, связанные с информационными технологиями, например Google и Intel если решите задачу, вам откроется секрет поиска информации в google.
У Вас есть два яйца неизвестной птицы, и есть доступ в стоэтажное здание. Каждое из яиц имеет скорлупу из неизвестного материала, оно может разбиться при падении с первого этажа, а может и не разбиться при падении с сотогоэтажа здания. Оба яйца одинаковы. Как определить, при падении с какого этажа яйцо разобьется? Нужно постараться определить этаж за минимальное количество тестов.
Решение...
Если бы в наличии было всего одно яйцо, то пришлось бы последовательного сбрасывать его с первого этажа, потом со второго, и далее до сотого, но у нас их два, поэтому используем второе для минимизации количества тестов. Будем делить оставшееся количество этажей пополам, сначала сбросим яйцо с 50-го этажа, если разбилось, значит оставшееся яйцо надо будет последовательно сбрасывать с 1-го по 49й этаж, если не разбилось, то бросаем его снова, с 75-го этажа, и так далее. В худшем случае 50 тестов.
Это первое решение, которое пришло в голову так ищет информацию Rambler, тут коварный HR-менеджер предложит Вам улучшить своё решение, и не спешите спорить с ним на бутылку водки, что это решение и так самое лучшее.
Как Вы уже поняли, самая медленная часть в этом решении - это линейный поиск по одному этажу, поэтому надо найти оптимальное кличество отрезков, на которое надо разделить здание, чтобы сократить поиск, используя второе яйцо.
Пусть X будет необходимое количество попыток. Таким образом, если одно яйцо разобьется, то оставшееся надо будет бросить X-1 раз. Если яйцо не разбилось, то на следующем этапе (если оно разобьется) на тесты с оставшимся яйцом останется X-2 попыток. Объясню на примере - Мы решили что оптимальное количество попыток всего 16, тогда бросаем одно яйцо с шестнадцатого этажа (уже одна израсходованная попытка), и если оно разбилось, то с помощью оставшегося проверяем 16-1=15 этажей. Если оно не разбилось, то у нас осталось в запасе 15 попыток, значит на следующем этапе нужно будет бросать яйцо (и еще одна попытка будет использована) с 16+15+1=32 этажа, так как если яйцо разобьется на 32м этаже, нам хватит 14 попыток чтобы проверить этажи с 17 по 31й.
Нам нужно найти, какое количество опытов будет оптимальным, это будет такое количество, при котором на заключительном этапе понадобится 0 экспериментов. Запишем это в виде последовательности:
(1+a) + (1+(a-1))+ (1+(a-2)) + ...+ (1+0) >= 100
Где 1+p это и будет то количество опытов, которое мы ищем, обозначим его X. Тогда X(X+1)/2 >=100 в нашем случае, надеюсь, Вы не забыли как решать квадратные уравнения?;) На случай, если забыли, ответ будет 14, соответственно одним яйцом (если оно не разбивается) будем проверять 14й, 27й, 39й, 50й, 60й, 69й, 77й, 84й, 90й, 95й, 99й, 100й этажи, если на одном из этапов яйцо разобьется, то проверим этажи, от максимального, где яйцо еще не билось, до того где оно разбилось.
Получаем результат - до 14 тестов.
Если бы в здании было 36 этажей, тогда X(X+1)/2>=36, решение было бы X=8, и проверить нужно будет 8, 15, 21, 26, 30, 33, 35, 36 этажи, пока яйцо не разобьется.
На далёком острове существует популяция разноцветных хамелеонов. 13 красных, 15 зеленых и 17 синих. В каждый момент времени встречаются два хамелеона разных цветов, и меняют цвет на третий. То есть если встретились синий и зеленый, то они меняют оба цвет на красный. Может ли получиться, что на острове все хамелеоны окажутся одного цвета, и почему?
Решение...
Не может получиться одного цвета на всём острове.
Обозначим цвета хамелеонов буквами R (красный), G (зеленый) и B (синий).
  • Популяция красных = 13 + 2R - B - G (13 было, два прибавилось, за счет одного синего и одного зеленого) аналогично:
  • Популяция синих = 17 + 2B - R - G
  • Популяция зеленых = 15 + 2G - R - B
Всего хамелеонов 45, значит, для того чтобы все стали красными, нужно получить еще 32 красных к уже существующим 13-ти, будем считать что должны происходить встречи только синих и зеленых, так как нам нужны только красные. За один шаг получается два красных хамелеона , и расхдуется по одному синему и зеленому, то есть требуется получить 16 пар красных, и израсходовать по 16 синих и 16 зеленых ящериц. Нам не хватит зеленых для полной трансформации в красный цвет.
Аналогично - чтобы получить 45 синих, надо по 14 красных и зеленых, а красных только 13. Чтобы получить 45 зеленых, потребуется по 15 остальных цветов, снова не хватит красных.
Два хулигана, Славик и Димон бьют витрину, витрина состоит из цельного стекла. За один удар Славик разбивает стекло (или осколок) на 7 осколков, а Димон за один удар на 10 осколков. Существует ли такая последовательность ударов, чтобы в результате получилось 2000 осколков?
Решение...
Не существует такой последовательности, чтобы начиная с целого стекла получить две тысячи осколков.
Чтобы понять, почему это невозможно, рассмотрим более простой пример. Пусть один единственный хулиган Вовик одним ударом бьет стекло на три части, сможет ли он разбить его на сто частей? - Если он бьет одну из трех частей стекла, и бьет её еще на три части, то получится всего пять осколков. Следующим ударом он разобьет один из этих пяти фрагментов еще на три. Получится 7 осколков. И так далее, каждый раз будет получаться нечетное число осколков. Таким образом никогда не получится 100 осколков (чётное число), ведь мы начали с нечетного числа (с одного целого стекла), и за каждый удар Вовик увеличивал общее число осколков на два.
В исходной задаче, про Славика и Димона, ситуация аналогична, каждый удар Славика увеличивает общее число осколков на 6, а каждый удар Димона на 9. Оба этих числа делятся на 3. Это значит, что добавление этих чисел к общему количеству осколков никак не изменит остаток от деления общего числа осколков на 3. 1 при делении на 3 дает остаток от деления 1. 2000 не дает такого остатка от деления на три, поэтому получить 2000 осколков невозможно.
Помните задачу про пиратов? Есть похожая задача, условия теже, то есть начинает делить пират с наибольшим номером, если его убьют, то следующий в обратном порядке, и так далее, но теперь пиратов не пятеро как в той задаче, а шестеро, они делят одну монету. Пираты очень умные, и преследуют следующие цели (именно в таком порядке) -
  1. Пираты хотят жить.
  2. Пираты хотят получить деньги.
  3. Пираты хотят увидеть как другие пираты умрут.
Если придется выбирать между двумя результатами, при которых он получает монету, то пират должен выбрать тот вариант, при котором он увидит смерть большего числа пиратов.
Каким образом может спастись шестой пират?
Решение...
  1. Выбор первого пирата очевиден, он не получит монету, когда выбор дойдет до второго пирата, и не сможет избавиться от второго пирата, так как если их останется всего двое, ему не набрать более 50% голосов, что необходимо для того чтобы получить монету и голову второго пирата.
  2. Со вторым пиратом тоже всё ясно, он монету оставит себе.
  3. Третий пират должен отдать монету первому, потому что если он отдаст её второму пирату, тот пожелает достичь своей третьей цели, а первый, как мы помним, получит монету только в случае если кто-то отдаст монету ему, а выживет в любом случае, значит выбор третьего его удовлетворит и он не станет голосовать против третьего.
  4. Четвертый пират не должен отдавать монету первому, потому что первый в любом случае захочет его смерти.собеседование зарплата
  5. Пятый пират умрет в любом случае, и выбор перейдет к четвертому пирату, нет для него возможности уговорить двоих голосовать за него. Поэтому он не захочет чтобы монета попала к нему.
  6. Шестой пират может расчитывать на свой голос, на голос пятого пирата. Монету он может отдать либо первому, либо четвертому, так как четвертый в любом случае ничего не получит, неясно, может ли он дать монету второму или третьему пирату. Ни второй, ни третий, не имеют гарантий, что получат монету от четвертого пирата, если выбор дойдет до него. Таким образом вопрос в том, как они оценят приоритеты - либо не гарантированно получить монету от четвертого пирата, либо гарантированно увидеть как пятый и шестой умрут. Давать им монету небезопасно, лучше первому или четвертому.
Существует небольшой город-королевство в несколько сотен жителей. В городе установился матриархат. В отношении населения городка верны следующие утверждения:
  • Каждая женщина поступает очень логично, и знает, что тоже самое можно сказать об остальных женщинах в городе.
  • Каждая женщина знает всё о поведении каждого мужчины в городе, за исключением поведения своего мужа, если она замужем. Никто в городе не имеет права говорить с женщиной о её муже.
  • В городе существует обычай - если женщина узнает о том что муж ей изменил, она обязана той же ночью вывести его на центральную площадь и застрелить. Согласно обычаю жители поступают всегда.
  • В городе сорок неверных мужей.
Однажды королева города собрала всех жителей на центральной площади, и объявила: "К сожалению вынуждена вам сообщить, что в городе есть мужчины, один или более, изменяющие своим женам!".
Вопрос - что произойдет после этого сообщения, и когда?
HR-менеджеры Microsoft предлагают эту задачу на собеседованиях. Логические рассуждения помогут Вам решить её.
Решение...
На первый взгляд всё просто, королева не сообщила жителям ничего нового, и следовательно ничего не произойдет, ведь они и так знали о своих соседях, что мужчины изменяют.
На самом деле так было бы, если бы женщины не знали что другие тоже получили эту информацию.
Женщины ведут себя очень логично, и это означает что каждая обманутая жена знает, что в городе есть 39 нечестных мужчин. Продолжая логически мыслить, она также понимает, что все они должны быть застрелены женами на 39ю ночь. В случае, если на 39. ночь ничего не произошло, каждая обманутая жена догадывается что обманщиков больше чем 39, это может означать только одно - её муж изменяет. Следовательно все неверные мужья будут застрелены на сороковую ночь.
Я поясню, как получилась логическая цепочка с ожиданием в течение 39 суток. На первый день, после выступления королевы, жена, которая знает о 39 изменниках, знает, что каждая из 39 обманутых должна знать о 38 неверных мужьях, так как не знает о своем, и свою очередь рассуждает логически, и предполагает, что каждая из тех 38 рассуждает так же, и так далее, до женщины, не знающей об одном неверном муже, а один муж-обманщик существует, ведь королева об этом публично объявила, и её слова считаются правдой. Таким образом все знают, что по крайней мере один неверный муж должен быть застрелен в первую же ночь, если их двое, то во вторую и т.д. до тех пор, пока число не достигнет известного женщине количества, т.е. 39.
Таким образом, через каждые сутки, которые прошли без убийств мужчин, становится общепринятой истиной, что количество гулящих мужчин стало больше на единицу. До тех пор, пока это общепринятое знание не превысит число, которое знает женщина. Это будет означать, что изменяет её муж, и она застрелит его.
Есть еще один тип задач на логику, если на собеседовании попадется такая, вы сразу поймёте. Рассмотрим одну из классических задач, её авторство приписывается Альберту Эйнштейну:
На одной из улиц в ряд стоят пять домов. Каждый из домов окрашен в свой цвет. В каждом из домов живет по одному человеку, все они из разных стран. У каждого есть свой любимый напиток, каждый играет в свою любимую игру, также каждый человек содержит домашнее животное, не такое как у остальных. Нет на этой улице двоих людей, которые были бы из одной страны, пили бы одинаковый напиток, играли бы в одинаковую игру или у них были бы одинаковые домашние животные.
  1. Британец живет в красном доме. 
  2. Швед держит у себя собаку. 
  3. Датчанин пьет чай. 
  4. Зеленый дом находится слева от белого. 
  5. Владелец зеленого дома пьет кофе. 
  6. Тот, кто играет в теннис, содержит дома птицу. 
  7. В желтом доме живет игрок в шахматы. 
  8. Человек из дома, находящегося в центре, пьет молоко. 
  9. Норвежец живет в первом доме. 
  10. Игрок в покер живет в доме, следующем за домом любителя кошек. 
  11. Владелец лошади живет в доме, следующем за домом шахматиста. 
  12. Бильярдист пьет пиво. 
  13. Немец играет в гольф. 
  14. Норвежец живет по соседству с синим домом. 
  15. Игрок в покер сосед того, кто пьет воду. 
У кого дома живет рыбка?
Решение...
Это задачи, решаемые с помощью таблиц:
 Собеседование решение Если научитесь решать такое в уме, можете смело просить +1000$ к средней зарплате:)
Как же получить такое решение? Начнем заполнять таблицу с четко определеннных значений, попутно вычеркивая использованные условия:
Норвежец живет в первом доме, норвежец живет по соседству с синим домом. Тот, кто в центре пьет молоко.
Далее идут нечетко определенные условия:
Зеленый дом слева от белого - это значит что зеленый дом не может быть самым левым, также он не может быть самым правым (пятым), так как белый будет правее. Выходит что зеленый дом может быть только третьим или четвертым. Но третьим он не может быть, ведь владелец зеленого дома пьет кофе (условие 5), а в третьем доме (центр) - любитель молока. Заполняем клетки "зеленый", "белый" и "кофе", вычеркиваем использованные условия.
Теперь мы можем использовать еще одно четко определенное условие - "британец живет в красном доме", ведь у нас остались неизвестными цвета первого и третьего домов, но в первом доме не может жить британец, его туда не пустит норвежец:)
Стало ясно, какого цвета дом у норвежца, в условии упоминается желтый цвет, он один до сих пор оставался нераспределенным. Заполняем "желтый", а также "шахматы" и "лошадь".
Где может жить игрок в покер? - Он сосед того, кто пьет воду. Получается что в покер играет житель синего дома, он не может жить в белом доме, если бы он там жил, то его сосед пил бы воду, а не кофе, он не может быть норвежцем, тот уже играет в шахматы, остается только синий дом, и заодно пропишем воду норвежцу. И кошка, оказывается, тоже у норвежца живет (см. условия про игрока в покер).
Бильярдист пьет пиво - однозначно житель белого дома, синий дом для него не подходит, поскольку там уже играют в покер.
Есть еще одно условие, которое можно вычеркнуть и заполнить два поля таблицы - "Датчанин пьет чай".
Итак, посмотрим на почти заполненную таблицу, на оставшиеся условия:
  1. Британец живет в красном доме. 
  2. Швед держит у себя собаку. 
  3. Датчанин пьет чай. 
  4. Зеленый дом находится слева от белого. 
  5. Владелец зеленого дома пьет кофе. 
  6. Тот, кто играет в теннис, содержит дома птицу. 
  7. В желтом доме живет игрок в шахматы. 
  8. Человек из дома, находящегося в центре, пьет молоко. 
  9. Норвежец живет в первом доме. 
  10. Игрок в покер живет в доме, следующем за домом любителя кошек. 
  11. Владелец лошади живет в доме, следующем за домом шахматиста. 
  12. Бильярдист пьет пиво. 
  13. Немец играет в гольф. 
  14. Норвежец живет по соседству с синим домом. 
  15. Игрок в покер сосед того, кто пьет воду. 
И сделаем вывод что рыбка может быть только у немца, поскольку у шведа она быть не может, он владеет собакой, и записать шведа можно только в белый дом, так как будь он в зеленом доме, некуда было бы записать немца с его гольфом (поля "британец" и "бильярд" уже заняты, свободные поля одновременно и происхождения и игры есть только в четвертом доме). По тому же принципу заполняем для британца поля "теннис" и "птица", свободными игра и живтное остались у него одного.