CreatureN2 ([info]creaturen2) wrote,

Простые задачки на логику.

Посетил сегодня еще одно собеседование в компанию Parallels. Хочется поделиться интересными логическими задачками, которые мне задавали. Их было три.

1. Имеются 4 карты. На одной стороне каждой написана буква русского алфавита, на другой стороне — цифра от 1 до 9. Карты лежат на столе, повернутые к нам разными сторонами, и мы видим следующую картинку: «А, Г, 4, 9». Какое наименьшее кол-во карт (и какие именно карты) нужно перевернуть, чтобы подтвердить или опровергнуть утверждение: «Из числа этих четырех карт на каждой карте с гласной буквой написана четная цифра».

2. Имеются две двери, за одной из них — смерть, за другой — жизнь. У каждой двери стоит охранник. Охранники бывают трех видов: правдивые (на все вопросы отвечают истину), лживые (на все вопросы отвечают ложь) и хитрецы. Хитрец чередует ответы. Если на очередной вопрос он ответил ложью, то на следующий вопрос обязательно ответит истиной, и наоборот. Но неизвестно, как хитрец ответит на первый заданный ему вопрос, это может быть с равной вероятностью как ложь, так и истина.
Мы не знаем, за какой дверью смерть. Мы не знаем, какого типа охранники стоят рядом с дверьми. Мы знаем лишь то, что рядом с одной из дверей стоит хитрец, а рядом с другой дверью стоит либо правдивый, либо лживый охранник. Охранники знают, что скрывается за каждой из дверей, и знают, какого типа они сами и какого типа их сосед.
Требуется: за 2 вопроса, предполагающие ответы «Да» или «Нет», заданные одному и тому же охраннику, выяснить, за какой дверью жизнь.

3. На бесконечную прямую на парашютах сбрасывается два робота в две разные точки. Роботы отстегивают парашюты на месте своего приземления, и далее действуют согласно программе, которая у них обоих одинаковая и написана на языке, имеющем следующие команды:
а) шаг влево (L); 
б) шаг вправо (R);
в) перейти на строку с номером N (goto N)
г) если в текущей точке есть парашют, перейти на строку с номером N (if парашют goto N).
Нужно составить программу для роботов таким образом, чтобы они обязательно встретились.

Ответ к первой задачке нужно было дать быстро. Для 2 и 3 задач давали на раздумье 5-10 минут. К сожалению, в первой задачке я облажался и дал неверный ответ. Попался, как неразумный зверь, в расставленную ловушку :) Однако 2 и 3 задачки я решил, хотя в третьей пошел сначала по неверному пути, отчего решил ее уже после того, как истекло время на раздумья. В целом, получил удовольствие от решения этих задач. Надеюсь, вы тоже получите. Только не подглядывайте в интернет, не лишайте себя положительных эмоций :) Задачки очень простые.

P.S. В конференц-зале компании, где меня собеседовали, имелись доски, испещренные наскальной живописью, очень напоминающей процесс обсуждения архитектуры некоей программы или чего-то подобного. Так вот, среди этой живописи я заметил интересную надпись следующего содержания:
«Blowjob <номер мобильного телефона> Анна»
К сожалению, телефончик записать не успел, было как-то неудобно показывать свой интерес.

Upd: В комментах СПОЙЛЕРЫ.

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    Your IP address will be recorded 

  • 38 comments

[info]garderobshik

January 16 2009, 15:49:23 UTC 3 years ago

я бы не решил эти задачи

[info]garderobshik

January 16 2009, 15:50:15 UTC 3 years ago

недолюливаю подобные задачи на логику...
да и вообще не люблю задачи)

[info]creaturen2

January 16 2009, 15:52:40 UTC 3 years ago

Я тоже раньше не любил. Теперь втянулся :)

[info]tarkon

January 16 2009, 16:12:42 UTC 3 years ago

Первую задачу упорно не могу решить :(

[info]creaturen2

January 16 2009, 16:19:16 UTC 3 years ago

А какие варианты есть?

[info]tarkon

January 16 2009, 16:39:15 UTC 3 years ago

Вариант 1 - четыре
Вариант 2 - две, с А и с 4.

[info]creaturen2

3 years ago

[info]tarkon

3 years ago

[info]localstorm

January 16 2009, 16:25:39 UTC 3 years ago

1) Я думаю надо перевернуть первую и третью карты.
2) Лень читать условие
3) Знаю я эту задачу. Её вообще любят задавать. Фишка в скорости. Они оба идут в одном направлении и как только один из них натыкается на парашют -- он начинает догонять второго.

P.S. Что ж ты телефон не запомнил? :))

----------

А вообще, я не люблю такие задачи. Они на самом деле ничего не говорят о пациенте. Точнее говорят, но не то, что нужно на реальной работе. Дело вот в чём. Надо понимать разницу. Одно дело, когда ты выдумываешь какой-нибудь алгоритм (вообще-то это работа для математика, по большому счёту), а другое дело, когда перед тобой стоят инженерные задачи (обеспечить отказоустойчивость и производительность системы в каких-нибудь ограничениях, например). Супер-пупер смекалка поможет в первом случае, а вот во втором нужно знать технологии.

Если посмотреть с другого боку, то следует понять ответ на следующий вопрос: "почему опытным разработчиками платят возможно в разы больше, чем новичкам?". Может быть они умнее в 2 раза? или они код фигачат так, что клавиатура дымится? Нет. Все это не верно. А платят им больше за то, что они:

1) Могут более спокойно работать в условиях внешнего давления (они уже попадали в стрессовые ситуации)
2) Они могут вспомнить аналогичные ситуауции из предыдущего опыта и не совершать ошибок
3) Они могут прикрыть задницу менеджера проекта, когда требуется принять ответственное решение по срокам и сложности задач, в т.ч. могут задать правильные вопросы, т.к. уже были ситуации, когда возникали проблемы.

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

[info]localstorm

January 16 2009, 16:28:35 UTC 3 years ago

вообще, конечно нет. Надо ещё последнюю перевернуть. А вдруг там гласная буква :)

[info]creaturen2

January 16 2009, 16:31:09 UTC 3 years ago

Нет, достаточно повернуть всего 2 карты. Я тоже сначала ответил, что три :)

[info]creaturen2

January 16 2009, 16:30:36 UTC 3 years ago

1) Ответ верен лишь наполовину (количество карт - две, но не эти).

[info]creaturen2

January 16 2009, 16:31:29 UTC 3 years ago

Не совсем эти.

[info]localstorm

January 16 2009, 16:33:52 UTC 3 years ago

Да, написал формулу. Написал отрицание. Утверждение неверно, если найдётся такая карты, на которой будет гласная буква и нечётная цифра. Первая и последняя карты на проверку.

[info]creaturen2

3 years ago

[info]localstorm

3 years ago

[info]localstorm

3 years ago

[info]creaturen2

3 years ago

[info]localstorm

3 years ago

[info]creaturen2

3 years ago

[info]localstorm

3 years ago

[info]creaturen2

3 years ago

[info]localstorm

3 years ago

[info]creaturen2

3 years ago

[info]creaturen2

January 16 2009, 16:38:02 UTC 3 years ago

Насчет телефончика - не все еще потеряно. Есть камрады с пропуском в тот офис, можно попросить их переписать телефончик, пока не стерли.

[info]localstorm

January 16 2009, 16:38:55 UTC 3 years ago

Бгг :))

[info]notsodarkwizard

January 16 2009, 18:47:59 UTC 3 years ago

1-я задачка халявна, ее сложность только в том, что ответ нужен сразу.
2-я - жесть, я реально словил кайф, когда придумал решение. Но потратил минут 20.
В 3-ей надо бы уточнить, должна ли программа быть конечна. Первое, что пришло мне в голову - заставить роботов "вращаться" вокруг своих парашютов, увеличивая радиус, но это как раз будет бесконечная программа, что вроде как не противоречит условию.

[info]creaturen2

January 16 2009, 19:12:27 UTC 3 years ago

Ой, ну грязные читы :) Да, программа должна быть конечна.
Я, кстати, тоже поначалу пытался их "завращать".

[info]creaturen2

January 16 2009, 19:13:12 UTC 3 years ago

Какое кстати у тебя решение второй задачи? Просто сравнить хочу со своим.

[info]notsodarkwizard

January 17 2009, 12:02:47 UTC 3 years ago

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

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

А условие, что охранники знают друг о друге, да и вообще, что их два - избыточно.

[info]creaturen2

3 years ago

[info]olegg_lieangel

January 17 2009, 00:27:57 UTC 3 years ago

Проснулся в 6:05, в 6:15 уже всё решил :)

1) А и 9, ибо переворачивание Г нам не нужно абсолютно (на согласные нам пофиг), любое значение на обороте 4 не нарушает истинности импликации. Так что ищем возможную ситуацию "истина->ложь", в данной формулировке - "гласная-нечётная".
2) Первый вопрос произвольному охранику - "Ты хитрец?". Если пациент ответил "Да", то либо он лжец, либо хитрец, сказавший правду, следовательно следующим ходом он при любом раскладе соврёт. Если "Нет" - то либо это честный, либо совравший хитрец -> в следующий кон он говорит правду. Ну а дальше интересуемся, Смерть ли за его дверью и соотносим с правдивостью.
3) Классика. Ведём в одну сторону, елси нашёл парашют - ускоряем в два раза.
1. L
2. IF P GOTO 4
3. GOTO 1
4. L
5. L
6. GOTO 4

[info]creaturen2

January 17 2009, 04:21:36 UTC 3 years ago

2) Угу, я тоже дал такой ответ.
3) Мб и классика, но я не знал. Решил почти также (у меня была чуть другая реализация, но это несущественно).

[info]dezer

January 29 2009, 13:40:21 UTC 3 years ago

Где в списке команд робота "ускориться в два раза"? Насколько я понимаю, они движутся всегда с постоянной скоростью.

Deleted comment

[info]creaturen2

January 17 2009, 05:00:06 UTC 3 years ago

Что-то мне уже не хочется звонить :(

[info]dezer

January 29 2009, 14:05:55 UTC 3 years ago

Первая понравилась, остальные видел на www.braingames.ru

[info]emilko

January 31 2009, 13:23:45 UTC 3 years ago

круто
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…