Кто выращивает рыбок. Задачка от эйнштейна

Есть пять домов разного цвета: красный, зеленый, белый, желтый и синий. Каждый населен человеком разной национальности: немец, швед, датчанин, норвежец и англичанин. Каждый из них пьет один вид напитков, курит одну марку сигарет и держит одно домашнее животное. Каждый из них уникален в пределах группы (напиток, марка сигарет, животное не повторяется!).

Вопрос: кто держит рыбку, если:

1. Англичанин живет в красном доме;

2. Швед держит собаку;

3. Датчанин пьет чай;

4. Зеленый дом — налево от белого, и его жилец пьет кофе;

5. Курильщик « Camel» держит птичку;

6. Жилец дома, находящегося в середине, пьет молоко;

7. Жилец желтого дома курит « Dunhill»;

8. Норвежец живет в первом доме;

9. Курильщик « Marlboro» живет рядом с владельцем кота;

10. Владелец лошади живет рядом с курильщиком Dunhill»;

11. Курильщик « Kent» пьет пиво;

12. Дом Норвежца — рядом с синим домом;

13. Немец курит « Rothmans»;

14. Курильщик « Marlboro» живет рядом с тем, кто пьет воду.

Ответ

Показать правильный ответ Первый дом: норвежец, желтый дом, « Dunhill» , кошка, вода;
Второй дом: датчанин, голубой дом, « Marlboro» , лошадь, чай;
Третий дом: англичанин, красный дом, « Camel» , птица, молоко;
Четвертый дом: немец, зеленый дом, « Rothmans» , рыба, кофе;
Пятый дом: швед, белый дом, « Kent» , собака, пиво;
Рыбку держит немец.

Загадка Эйнштейна — известная логическая задача, авторство которой приписывается Альберту Эйнштейну.

Считается, что эта головоломка была создана Альбертом Эйнштейном в годы его детства. Также бытует мнение, что она использовалась Эйнштейном для проверки кандидатов в ассистенты на способность к логическому мышлению.

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

В своей самой тяжёлой редакции задача предполагает решение в уме, без использования каких-либо записей или средств сохранения информации. Без этого головоломка заметно теряет в сложности, поскольку может быть решена простым составлением таблицы с исключением заведомо противоречивых вариантов — и следовательно мало что говорит о способностях испытуемого."

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

Вопрос: кто выращивает рыбок?

Подсказки:

  • Норвежец живет в первом доме.
  • Англичанин живет в красном доме.
  • Зеленый дом находится левее белого.
  • Датчанин пьет чай.
  • Тот, кто курит Rothmans, живет рядом с тем, кто
  • выращивает кошек.
  • Тот, кто живет в желтом доме, курит Dunhill.
  • Немец курит Marlboro.
  • Сосед того, кто курит Rothmans, пьет воду.
  • Тот, кто курит Pall Mall, выращивает птиц.
  • Швед выращивает собак.
  • Тот, кто курит Philip Morris, пьет пиво.
  • В зеленом доме пьют кофе.

Решение задачи

Итак, у нас есть 25 позиций, которые необходимо заполнить следующими данными:

  • Национальность : Норвежец, Англичанин, Датчанин, Немец, Швед.
  • Цвет дома : Красный, Зелёный, Белый, Жёлтый, Синий.
  • Марка сигарет : Ротманс, Данхилл, Мальборо, Пелл Мелл, Филипп Моррис.
  • Животное : Кошки, Птицы, Собаки, Лошади, Рыбки.
  • Напиток : Чай, Молоко, Вода, Пиво, Кофе.

По сути, нам надо заполнить вот такую табличку:

Из подсказок сразу же заполняем ряд ячеек таблицы:

  • Норвежец живет в первом доме.
  • Норвежец живет рядом с синим домом.
  • Тот, кто выращивает лошадей, живет в синем доме.
  • Тот, кто живет в центре, пьет молоко.

Раз англичанин живёт в красном доме, значит, норвежец в красном жить не может. Равно норвежец не может жить в синем. Не может он жить и в белом, так как зелёный дом находится левее белового, а дом норвежца — самый левый. В зелёном он тоже жить не может, так как справа от зелёного белый дом, а справа от норвежца — синий. Значит, он живёт в жёлтом. Отсюда же делаем и вывод, что норвежец курит Данхилл.

Далее, раз зелёный дом находится левее белого, значит, у него номер либо 3, либо 4. Однако в третьем, среднем, доме пьют молоко, а в зелёном доме пьют кофе — значит номер зелёного дома = 4. Значит, белый дом у нас идёт под номером 5, а красный — под номером 3. Здесь же живёт англичанин. Кофе пьют в 4 доме.

Далее, раз немец курит Мальборо, то он не курит Филипп Моррис, и потому не пьёт пиво. Не пьёт он и молоко, которое пьёт англичанин. Не пьёт и чай — это делает датчанин. Значит, немец пьёт либо воду, либо кофе. Норвежец не может пить пиво (он курит другие сигареты), молоко (не англичанин), кофе (живёт не в зелёном доме), чай (не датчанин). Значит норвежец пьёт воду, а потом немец пьёт кофе, и живёт в зелёном доме. Плюс не забываем, что немец курит Мальборо. И раз воду у нас пьёт норвежец, то его сосед (второй дом) курит Ротманс.

Раз швед у нас выращивает собак, то он не может жить во втором доме (там выращивают лошадей), значит он живёт в пятом доме (белом). Значит во втором доме живёт датчанин, который пьёт чай.

Раз курильщик Пелл Мелл выращивает птиц, то это не швед, а значит — англичанин. Следовательно, швед курит Филипп Моррис и пьёт пиво.

И теперь у нас осталась последняя подсказка:

  • Тот, кто курит Rothmans, живет рядом с тем, кто выращивает кошек.

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

ОТВЕТ: рыбок выращивает немец!

И сегодня я предлагаю вам попрактиковаться и примерять на себя роль сыщика, разгадав одну задачу, а если быть точнее, то это загадка Эйнштейна про 5 домов. Говорят, что он придумал её, когда был маленьким и заявлял, что справиться с ней смогут всего лишь 2% населения планеты. В наше время она немного видоизменилась, но всё равно не утратила своей сложности.

Задача

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

  • Японец живёт в первом доме.
  • А француз в красном.
  • Бирюзовый дом стоит немного левее синего.
  • Испанец любит пить кофе.
  • Человек, который предпочитает Davidoff, живёт по соседству с тем, у кого много кошек.
  • Человек, живущий в доме зелёного цвета, курит Monte Carlo.
  • А бельгиец Camel.
  • Тот, кто проживает в центральном доме, пьет йогурт.
  • А тот, кто живёт рядом с тем, кто курит Davidoff, пьет молоко.
  • Человек, который любит сигареты Parlament, разводит хорьков.
  • Африканец держит у себя карликовых пинчеров.
  • Японец живет по соседству с фиолетовым домом.
  • А в фиолетовом доме обитает человек, который любит мышек.
  • Человек, который любит фанту, курит Rothmans.
  • А тот, кто живёт в доме, стены которого в бирюзовых тонах, любит пиво.

Решение

Итак, а теперь непосредственно само решение. У нас есть несколько точных данных, которые мы уже можем зафиксировать в таблице.

Точные данные

Номер дома 1 2 3 4 5
Национальность Японец
Напиток йогурт
Сигареты
Питомцы мышки
Цвет дома фиолетовый

Цветовая гамма домов

Для японца красный не подходит, там обжился француз, фиолетовый также не наш вариант, потому что он находится рядом. Также он не бирюзовый, потому что справа от бирюзового должен быть синий. Исключив все варианты, получается, что наш японец находится в зелёном доме. Далее выясняем, что, если бирюзовый дом находится левее синего, то значит он под номером 4 или 3. Тот, кто находится в центральном доме, любит йогурт, а в бирюзовом – пиво. Выходит, что любитель пива под номером 4, а синий цвет в 5 ячейке. Остаётся красный, он и будет под номером 3, а ещё мы знаем, что там живёт француз.
Номер дома 1 2 3 4 5
Национальность японец француз
Напиток йогурт пиво
Сигареты Monte Carlo
Питомцы мышки
Цвет дома зелёный фиолетовый красный бирюзовый синий

Задача становится всё интересней и интересней, не так ли?

2-й этап

Теперь пробуем выяснить, что предпочитает выпивать бельгиец. Тот, кто употребляет фанту, любит Rothmans, а бельгиец покуривает Camel, так что фанта не подходит. Йогурт пьёт француз, а кофе – испанец. Остаётся или молоко, или пиво. Японец также не пьёт фанту, потому что курит не Rothmans, а также не пьёт йогурт, потому что мы знаем, что это прерогатива француза. Пиво употребляет житель бирюзового дома, а кофе – испанец. Получается, напиток японца – молоко, а бельгийца – пиво. Рядом с тем, кто любит молоко, живёт человек, курящий Davidoff, а рядом с японцем только номер 2.

Номер дома 1 2 3 4 5
Национальность японец француз бельгиец
Напиток молоко йогурт пиво
Сигареты Monte Carlo Davidoff Camel
Питомцы мышки
Цвет дома зелёный фиолетовый красный бирюзовый синий

Этап 3, заключительный

Мы знаем, что во 2 доме держат мышей, а африканец занимается карликовыми пинчерами, значит это не его дом. Остаётся номер 5. Тот, кто курит Parlament, разводит хорьков, мы знаем, что у африканца пинчеры, поэтому получается, что это француз. Остались сигареты Rothmans, и они принадлежат африканцу, как и любовь к фанте.

Номер дома 1 2 3 4 5
Национальность японец испанец француз бельгиец африканец
Напиток молоко кофе йогурт пиво фанта
Сигареты Monte Carlo Davidoff Parlament Camel Rothmans
Питомцы кошки мышки хорьки Карликовые пинчеры
Цвет дома зелёный фиолетовый красный бирюзовый синий

Тот, кто курит Davidoff, живёт рядом с ценителем кошек, то есть или с 3, или с 1 домом. Но мы знаем, что в 3 доме находится француз, и он держит хорьков, значит кошки у японца. Из национальностей у нас остался испанец, его мы и вписываем во вторую ячейку. А ещё мы знаем, что он очень любит кофе.

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

Завершение

А на сегодня всё! Держите свой мозг в тонусе, занимая его ребусами и загадками. Ведь, как вы знаете, развитие – залог успеха. Что бы лучше проходить такие задачки, рекомендую прочитать , об упражнениях для мозга. Если вы не хотите пропустить статьи о саморазвитии, подписывайтесь на обновления. До скорых встреч.

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

Ее можно решить на бумаге или в уме, последовательно исключая неподходящие варианты. Однако, ее также можно решить более технично. Один из способов - написать программку на прологе. Но здесь я хочу ее решить используя более простые механизмы - регулярные выражения. А именно, перевести условия загадки на язык регекспов и свести задачу к поиску подходящей строки во всем допустимом наборе строк. Кстати, этот набор строк показан на рисунке.

Идея

Сама идея не моя, услышал ее в одной видеолекции. Однако, там ее решали слишком уж изощренно. Я попытался решить ее более просто и прямолинейно.

Для удобства приведу здесь текст загадки:

  1. Норвежец живёт в первом доме.
  2. Англичанин живёт в красном доме.
  3. Зелёный дом находится слева от белого, рядом с ним.
  4. Датчанин пьёт чай
  5. Тот, кто курит Marlboro, живёт рядом с тем, кто выращивает кошек.
  6. Тот, кто живёт в жёлтом доме, курит Dunhill.
  7. Немец курит Rothmans.
  8. Тот, кто живёт в центре, пьёт молоко.
  9. Сосед того, кто курит Marlboro, пьёт воду.
  10. Тот, кто курит Pall Mall, выращивает птиц.
  11. Швед выращивает собак.
  12. Норвежец живёт рядом с синим домом.
  13. Тот, кто выращивает лошадей, живёт в синем доме.
  14. Тот, кто курит Winfield, пьет пиво.
  15. В зелёном доме пьют кофе.
Вопрос: кто разводит рыбок?

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

И так, что и где мы будем искать. Для начала нужно каким-то образом формализовать правила. У нас пять домов, цветов, национальностей, напитков, животных и сигарет. Произвольный вариант дома с «жильцами» может выглядеть так:

German white cat beer malboro

Но этого недостаточно, так как у нас есть правила, которые учитывают взаимное расположение домов и предметов в них (к примеру, правила: 1, 3, 5...). Учтем это, расположив в строке пять домов последовательно:

German white cat beer malboro englishman red dog water pallmall norwegian green fish milk winfield dane blue bird tea dunhill swede horse yellow coffee rothmans

Строка выше - один из вариантов расположения предметов. В данном случае, неверный. Если же мы составим все возможные варианты, и поместим это в один текст, получится следующее:

N c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s n c a d s ...

Где n - nation, c - color, a - animal, d - drink, s - cigarettes. И каждая из этих букв может принимать одно из пяти своих значений.

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

  1. ^norwegian \w+
  2. \w+ englishman red \w+
  3. \w+ dane \w \w tea \w+
И если строка подойдет ко всем правилам, то мы нашли решение! Останется только посмотреть национальность в доме с рыбой. Это и является главной идеей поиска: построить текст и пройтись по нему регулярными выражениями.

Но есть плохая новость. Текст, по которому будет проходить поиск может быть ОЧЕНЬ большим. Если точнее, он будет размером (5!)^5 строк (~24 миллиардов). Его не то чтобы проверить, его будет сложно даже сгенерировать. Но есть и хорошая новость. Мы можем не генерировать весь этот текст, а воспользоваться операцией пересечения регулярных выражений. То есть найдем все общие строки регулярного выражения * (все возможные строки), с теми строками, которые дают регулярные выражения правил задачи . Та строка (а может и строки) что останется после пересечения и будет решением задачи.

К сожалению я не знаю движков, способных пересекать регулярные выражения. По этому придется использовать напрямую конечные автоматы, лежащие в основе любого регекспа.

Реализация

Конечные автоматы буду строить с помощью библиотечки openfst . Она дает все что мне необходимо для построения автоматов, плюс удобный способ работы из шелла. Чтобы сделать программирование еще более «ненормальным», я вообще не буду программировать:). За исключением простых bash-скриптов кода не будет.

Шаг 1 - Строим базовые автоматы

Создадим текстовый файл со списком всех объектов. Это будет наш алфавит.
norwegian englishman dane german swede white red ...

Построим базовые автоматы, каждый из которых допускает только одно слово из алфавита.
j=1 for i in `cat alph`; do echo -e "0 1 $j\n1" | fstcompile --acceptor > $i ((j=$j+1)) done

Fstcompile - команда пакета openfst, компилирующая текстовое представление автомата в бинарное. Это нужно для того, чтобы потом применять к этому автомату различные операции.

И так, у нас появился список файлов-автоматов. Они очень тривиальны. К примеру, автомат beer будет выглядить так:

Он эквивалентен регулярному выражению «beer». Пока все довольно просто. Кроме того нам понадобятся еще два базовых автомата - пустое множество, и любая строка, т.е. звездочка *. Строим.

Шаг 2 - Строим пустой автомат и звездочку

Пустая строка, автомат "empty":
echo "0" | fstcompile --acceptor > empty

Звездочка, автомат "star":
cp empty star for i in `cat alph`; do fstunion star $i star done fstclosure star star
Последний делается простым объединением базовых автоматов и замыканием. В регулярных выражениях это всего лишь (englishman|dane|...|cat|dog|...)*. Этот автомат будет таким:

Шаг 3 - Строим дома

Правила будет удобней описывать, если создать более комплексные автоматы, такие как национальность, цвет и т.д. Опять, использую несложный скрипт:

C="./concat.sh" $c norwegian star > r1 $c star englishman red star > r2 $c star animal drink cigarette nation star > r3 $c star dane color animal tea star > r4 $c star malboro nation color cat star > r5_0 $c star cat drink cigarette nation color animal drink malboro star > r5_1 $c star yellow animal drink dunhill star > r6 $c star german color animal drink rothmans > r7 $c house house nation color animal milk cigarette house house > r8 $c star malboro nation color animal water star > r9_0 $c star water cigarette nation color animal drink malboro star > r9_1 $c star bird drink pallmall star > r10 $c star swede color dog star > r11 $c star norwegian color animal drink cigarette nation blue star > r12_0 $c star blue animal drink cigarette norwegian star > r12_1 $c star blue horse star > r13 $c star beer winfield star > r14 $c star green animal coffee star > r15 fstunion r5_0 r5_1 > r5 fstunion r9_0 r9_1 > r9 fstunion r12_0 r12_1 > r12

Правила 5, 9 и 12 являются составными. Я определяю каждую часть отдельно, а потом делаю объединение. Скрипт concat.sh всего лишь делает конкатинацию автоматов, переданных в аргументах:
cp empty _c for i in $*; do fstconcat _c $i _c done; cat _c; rm _c;

Итак, на выходе получим автоматы r1,r2...,r15. Все готово для финального шага.

Шаг последний - Пересечение

./intersect.sh r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 > result

Где intersect.sh - пересечение автоматов в аргументах.
cp cl _c for i in $*; do fstintersect _c $i _c done; cat _c; rm _c;

На этом можно было бы и закончить - посмотреть автомат и узнать у кого рыба. Но я с самого начала не учел одну вещь - в моих правилах каждое из слов может повторятся. К примеру, два человека могут пить одно пиво и заводить одно животное. Это неверно по условиям задачи. Создавать такой фильтр крайне неудобно, используя регулярные языки, т.к. у нас нет способа «запомнить», что такое слово уже было. Но ограничить как-то нужно. По этому подвергаем финальный результат следующему скрипту.

I="./intersect.sh" d="fstdifference" for i in `cat alph`; do fstdifference cl $i > differ fstconcat differ $i | fstconcat - differ | fstrmepsilon - | fstdeterminize - | fstminimize - > ${i}_cont done cp result out for i in `ls *_cont`; do echo $i fstintersect $i out | fstrmepsilon - | fstdeterminize - | fstminimize - out done rm differ rm *_cont

Этот скрипт формирует специальный авотомат для каждого слова из алфавита, и применяет его к результату. Таким образом, отметаются пути с повторяющимися словами. В итоге, финальный результат (а по сути, автомат "out") выглядит так:

Это частичное изображение автомата (все не влезло). Каждые пять слов определяют дом. Как видно из рисунка, немец разводит рыбок.

Заключение

Вот такой вот необычный способ решения задачи. Но кроме всего прочего он показывает, что регулярные языки - это довольно мощная штука. Более того, если верить Ульману, любую математическую проблему можно представить как нахождения строки в определенном языке . Что и было показано.

Ps и да, мьсе действительно знает толк в извращениях:)

Ребята, мы вкладываем душу в сайт. Cпасибо за то,
что открываете эту красоту. Спасибо за вдохновение и мурашки.
Присоединяйтесь к нам в Facebook и ВКонтакте

Далеко не все знают, но еще до того, как стать великим ученым, Эйнштейн придумал одну необычную задачку. Он полагал, что 98 % жителей Земли не в состоянии решить ее в уме. Принадлежите ли вы к тем оставшимся 2 % самых умных?

сайт предлагает вам это доказать и решить знаменитую задачку Эйнштейна.

Условие

5 разных человек в 5 разных домах разного цвета любят 5 разных блюд, содержат 5 разных видов животных, пьют 5 разных видов напитков. Вопрос: кто выращивает рыбок?

Попробуйте решить эту задачку в уме или на листе бумаги, нарисовав небольшую табличку. Листайте вниз, как будете готовы проверить себя и узнать ответ.

Решение

Из подсказок мы знаем, что норвежец живет в первом доме , рядом с синим домом. А в синем доме живет человек, у которого есть лошадь . Тот, кто живет в центре, пьет молоко.

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

Зеленый левее белого, значит, у него номер 4. Белого - 5, а красного - 3. Здесь же живет англичанин. Кофе пьют в 4-м доме .

Сказано, что немец любит пончики, значит, он не ест рис и не пьет пиво. Также он не пьет молоко и чай, это делают англичанин и француз. Значит, немец пьет воду или кофе.

Норвежец не может пить пиво (так как ест другую еду), кофе (живет не в зеленом доме), чай (не француз). Значит, норвежец пьет воду, а немец кофе, и живет в зеленом доме. И раз воду у нас пьет норвежец, то его сосед любит яблоки (из подсказок).

Раз у шведа есть собака, то он не может жить во втором доме (там лошадь), значит, швед живет в пятом доме (белом). А во втором доме живет француз, который пьет чай.

Если любитель сыра выращивает птиц, то это не швед, значит - англичанин. Следовательно, швед ест рис и пьет пиво.

И теперь у нас осталась последняя подсказка: тот, кто ест яблоки, живет рядом с тем, у кого кошка. Яблоки ест француз (второй дом). Справа от него англичанин, у которого птицы, значит, второй сосед француз (слева), а кошка у норвежца.

И наконец, рыбок выращивает немец.