Задачка про рыбку

Загадка Эйнштейна и принципы ее разгадывания

Задачка про рыбку

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

Загадка Эйнштейна

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

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

Кроме того, в условии задачи, которое мы рассмотрим ниже, упоминается марка американских сигарет «Kool», ещё не существовавшая при жизни предполагаемых авторов.

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

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

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

Итак, задача.

Оригинальный текст загадки Эйнштейна

Первый вариант загадки был опубликован в декабре 1962 года в английском журнале «Life International». А в марте 1963 в том же журнале был напечатан ответ.

Текст загадки:

  1. На улице расположены пять домов.
  2. Англичанин проживает в доме красного цвета.
  3. Испанец держит собаку.
  4. В доме зелёного цвета пьют кофе.
  5. Украинец любит чай.
  6. Дом зелёного цвета расположен сразу справа от дома белого цвета.
  7. Курящий «Old Gold», разводит улиток.
  8. В доме жёлтого цвета живёт курящий «Kool».
  9. В доме по центру пьют молоко.
  10. Норвежец живёт в доме №1.
  11. Сосед курящего «Chesterfield», держит в доме лису.
  12. В доме, соседнем с тем, где держат лошадь, живёт курящий «Kool».
  13. Курящий «Lucky Strike», любит апельсиновый сок.
  14. Японец курит «Parliament».
  15. Норвежец живёт в доме, расположенном рядом с домом синего цвета.

Вопрос: Кто пьёт воду, а кто держит зебру?

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

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

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

Решение загадки Эйнштейна

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

Шаг №1 (в скобках указаны пункты текста загадки)

Согласно условию, норвежец проживает в доме №1 (10). Откуда начинается отсчёт – не важно, т.к. нас заботит не направление нумерации домов, а только их порядок. (10) и (15) говорят о том, что дом №2 – синего цвета.

Так какого цвета дом №1? Он не может быть ни зелёным, ни белым, т.к. они должны быть рядом, исходя из цвета дома №2 и (6). Также дом №1и не красный, т.к. в красном проживает англичанин.

Соответственно, дом №1 – жёлтого цвета.

Далее следует, что в доме №1 курят сигареты «Kool» (8), а в доме №2 есть лошадь (12). Норвежец из жёлтого дома №1, курящий «Kool», не пьёт чай (5), не пьёт кофе (4) , не пьёт молоко (9) и не пьёт апельсиновый сок (13). Получается, что норвежец и есть тот, кто пьёт воду.

Шаг №2

Какие сигареты курят в синем доме №2, где есть лошадь?

«Kool» курят в доме №1 (8). «Old Gold» курит тот, у кого в доме улитки (7). Если, например, предположить, что в доме №2 курят «Lucky Strike», то получится, что там предпочитают и апельсиновый сок (13). Значит, кто может жить в доме №2? Не норвежец (10), не англичанин (2), не испанец (3), не украинец (5) и не японец (14). Но такой ситуации быть не может, а значит, это не «Lucky Strike».

Если предположить, что это «Parliament», то получится, что в доме №2 живёт японец (14). Но что он пьёт? Не чай (5), не кофе (4), не молоко (9) и не сок (13). Такого вариант тоже быть не может, а значит, это не «Parliament». Вывод остаётся один: в доме №2 курят «Chesterfield».

Кто живёт в синем доме №2, курит «Chesterfield» и у кого есть лошадь? Он не может быть норвежцем (10), англичанином (2), испанцем (3) и японцем (14). Соответственно, это украинец, который пьёт чай (5).

Шаг №3

Учитывая, что «Chesterfield» курят в доме №2, то из (11) становится ясно, что лиса находится либо в доме №1, либо в доме №3. Но в каком?

Для начала, допустим, что лиса в доме №3. Тогда, что пьёт человек, курящий «Old Gold» и разводящий улиток? Т.к. вода и чай уже исключены на первых двух шагах и это не может быть сок (13) и молоко (9), то остаётся кофе, который пьёт житель зелёного дома (4).

Следовательно, если лиса в доме №3, то в доме зелёного цвета живёт человек, курящий «Old Gold», разводящий улиток и пьющий кофе. Кто он? Это не норвежец (10), не украинец (5), не англичанин (2), не японец (14) и не испанец (3).

Такого вариант быть не может, а значит, лиса находится в доме №1.

Шаг №4

Исходя из всех предыдущих размышлений, получается, что апельсиновый сок и кофе пьют в оставшихся домах №5 и №4. Не важно, в каком – что. Поэтому, назовём их просто «дом с соком» и «дом с кофе».

Где живёт человек, курящий «Old Gold» и разводящий улиток? Не в доме с соком, т.к. там живёт тот, кто курит «Lucky Strike» (13). Допустим, что он живёт в доме с кофе.

Получается, что человек, курящий «Old Gold», разводящий улиток и пьющий кофе, живёт в зелёном доме (4). А этого, опять же, быть не может (руководствуемся рассуждениями из шага №3).

Выходит, что человек, курящий «Old Gold» и разводящий улиток, живёт в доме №3.

Из всего это следует, что человек, курящий «Parliament», живёт в доме зелёного цвета, где любят кофе. А это – японец (14).

Далее получается, что испанцем является человек, курящий «Lucky Strike», пьющий апельсиновый сок и держащий собаку.

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

Очевидно, что зебра находится в доме у японца.

Ответ на загадку Эйнштейна

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

Такова загадка Эйнштейна и принципы её решения. Выглядит, по большому счёту, не очень сложно. Но учитывайте, что решали задачу мы в письменной форме. Решить же её в уме, наверняка, сможет далеко не каждый.

Попытайте счастье и попробуйте повторить решение, не используя никаких подручных средств. Если же вам не хочется решать уже знакомую задачу, вы можете «поломать» голову над немного другой её формулировкой.

Другой вариант загадки Эйнштейна

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

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

Вопрос: Кто из жильцов разводит рыбок?

Удачи вам в решении этой задачи!

Источник: https://4brain.ru/blog/%D0%B7%D0%B0%D0%B3%D0%B0%D0%B4%D0%BA%D0%B0-%D1%8D%D0%B9%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0/

Задача Эйнштейна про 5 домов

Задачка про рыбку

Мышление – это один из важнейших познавательных процессов, без которого невозможно нормальное функционирование человеческого мозга. Существует несколько типов мышления. Одним из них является логическое мышление.

Логическим мышлением обладает каждый человек, однако у одних оно развито хорошо, а у других не слишком. Существует множество методик для развития логического мышления.

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

Рассмотрим, что представляет собой эта задача и как ее решить.

Что такое загадка Эйнштейна?

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

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

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

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

Как разгадать загадку Эйнштейна?

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

Условие задачи:

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

  • Американец проживает в первом доме.
  • Китаец – в доме красного цвета.
  • Коричневый дом располагается левее, чем серый.
  • Итальянец любит пить чай.
  • Человек, который предпочитает сигареты Camel, проживает по соседству с тем, кто разводит нутрий.
  • Человек, живущий в доме оранжевого цвета, курит сигареты President.
  • Австриец любит сигареты Lucky Strike.
  • Человек, проживающий в центральном доме, пьет кефир.
  • Человек, живущий рядом с тем, кто курит Camel, пьет сок.
  • Человек, курящий сигареты Chesterfield, разводит кур.
  • Финн занимается разведением коров.
  • Американец живет по соседству с синим домом.
  • В синем доме проживает человек, который разводит зебр.
  • Человек, который любит виски, курит сигареты Parliament.
  • Человек, проживающий в доме коричневом цвета, любит кока-колу.

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

  1. Исходя из условия задачи, можно выделить следующие данные:– Национальность: американец, китаец, итальянец, австриец, финн.– Цветдома: красный, синий, коричневый, оранжевый, серый.

    – Сигареты: Camel, Lucky Strike, President, Chesterfield, Parliament.

    – Напитки: кефир, сок, кока-кола, виски, чай.

    – Животные: нутрии, куры, коровы, зебры, рыбки.

  2. Рисуем таблицу:
  3. Вписываем в таблицу имеющиеся данные:- Американец проживает в первом доме.- Человек, который разводит зебр, проживает в синем доме.

    – Американец проживает по соседству с домом синего цвета.

    – Человек, живущий в центральном доме, пьет кефир.

  4. Вычисляем, в каком доме живет американец. В красном он жить не может, потому, что там китаец. В синем он тоже не может жить, поскольку синий находится по соседству. Коричневый дом тоже не может ему принадлежать, поскольку справа от коричневого дома находится серый, а справа от американца – синий. Коричневый дом располагается слева от серого, а дом, в котором живет американец – самый левый, значит, в сером доме он жить не может. Таким образом, получается, что американец проживает в оранжевом доме и любит сигареты President.
  5. Поскольку коричневый дом располагается левее серого, он будет иметь № 3 или № 4. Человек, живущий в доме № 3, пьет кефир, а живущий в коричневом доме – кока-колу. Получается, что коричневый дом имеет № 4. Отсюда следует, что серый дом имеет № 5, а красный – № 3. В красном доме проживает китаец. В доме № 4 пьют кока-колу.
  6. Вычисляем, какой напиток пьет австриец. Тот, кто курит Parliament, пьет виски. Австриец курит Lucky Strike, значит, это не он. Кефир пьет китаец, а чай – итальянец. Выходит, что напиток австрийца – сок или кока-кола. Американец не может являться любителем виски, поскольку курит не Parliament. Кефир американец тоже не может пить (это напиток китайца), кока-колу пьет тот, кто живет в коричневом доме (а это не американец), чай пьет тоже не американец, а итальянец. Выходит, что американец пьет сок. Значит, напиток австрийца – кока-кола. К тому же австриец курит сигареты Lucky Strike. А поскольку американец пьет сок, то его сосед из дома № 2 курит Camel.
  7. В доме № 2 разводят зебр. Финн разводит коров, следовательно, он не может жить в доме № 2. Выходит, что финн живет в доме № 5, который имеет серый цвет. Тогда в доме № 2 живет итальянец (любитель чая).
  8. Человек, предпочитающий сигареты Chesterfield, занимается разведением кур. Получается, что это не финн, а китаец. Тогда выходит, что финн предпочитает виски и сигареты Parliament.
  9. Человек, предпочитающий сигареты Camel, проживает рядом с человеком, который разводит нутрий. Сигареты Camel предпочитает итальянец, проживающий в доме № 2. Китаец, занимающийся разведением кур, живет справа от него. Получается, что сосед итальянца слева разводит нутрий (это американец).

Теперь можно ответить на поставленный вопрос: кто выращивает рыбок? Ответ: рыбок выращивает австриец.

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

Задача Эйнштена про квадраты

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

Сколько квадратов вы видите на рисунке?

Квадраты 1:1 – 16 шт.Квадраты 2:2 – 9 шт.Квадраты 3:3 – 4 шт.Квадраты 4:4 – 1 шт.

Всего: 30 штук

Загадка про треугольники

Сколько треугольников вы видите?

Ответ – 7.

25/12/2016  |  Андрей ЛожниковРазвитие мышления и памяти

Подпишитесь на обновления сайта через RSS ленту или получайте обновления по электронной почте:



Источник: https://newgoal.ru/zadacha-ejnshtejna-pro-5-domov/

Загадка Эйнштейна: Кто выращивает рыбок?

Задачка про рыбку

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

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

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

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

Тем не менее, не существует никаких документальных свидетельств того, что Эйнштейн когда-либо утверждал подобное.

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

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

Подсказки:

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

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

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

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

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

Номер дома 1 2 3 4 5 Национальность Цвет дома Сигареты Животное Напиток

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

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

Цвет дома

Сигареты Животное

Напиток

Норвежец
Синий
Лошади
Молоко

Раз англичанин живёт в красном доме, значит, норвежец в красном жить не может. Равно норвежец не может жить в синем.

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

Значит, он живёт в жёлтом. Отсюда же делаем и вывод, что норвежец курит Данхилл.

Номер дома 1 2 3 4 5 Национальность

Цвет дома

Сигареты

Животное

Напиток

Норвежец
Жёлтый Синий
Данхилл
Лошади
Молоко

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

Номер дома 1 2 3 4 5 Национальность

Цвет дома

Сигареты

Животное

Напиток

Норвежец Англичанин
Жёлтый Синий Красный Зелёный Белый
Данхилл
Лошади
Молоко Кофе

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

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

И раз воду у нас пьёт норвежец, то его сосед (второй дом) курит Ротманс.

Номер дома 1 2 3 4 5 Национальность

Цвет дома

Сигареты

Животное

Напиток

Норвежец Англичанин Немец
Жёлтый Синий Красный Зелёный Белый
Данхилл Ротманс Мальборо
Лошади
Вода Молоко Кофе

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

Номер дома 1 2 3 4 5 Национальность

Цвет дома

Сигареты

Животное

Напиток

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

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

Номер дома 1 2 3 4 5 Национальность

Цвет дома

Сигареты

Животное

Напиток

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

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

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

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

Номер дома 1 2 3 4 5 Национальность

Цвет дома

Сигареты

Животное

Напиток

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

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

« Вернуться назад | Все новости | Следующая новость »

Источник: http://animalworld.com.ua/news/zagadka-ejnshtejna-kto-vyrashhivajet-rybok-

Кто разводит рыбок? Или решение загадки Эйнштейна регулярным языком

Задачка про рыбку

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

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

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

Идея

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

  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 sn c a d s n c a d s n c a d s n c a d s n c a d sn 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 — Строим базовые автоматы

Создадим текстовый файл со списком всех объектов. Это будет наш алфавит.norwegianenglishmandanegermanswedewhitered… Построим базовые автоматы, каждый из которых допускает только одно слово из алфавита.

j=1for i in `cat alph`; do echo -e «0 1 $j1» | fstcompile —acceptor > $i ((j=$j+1))done fstcompile — команда пакета openfst, компилирующая текстовое представление автомата в бинарное. Это нужно для того, чтобы потом применять к этому автомату различные операции. И так, у нас появился список файлов-автоматов. Они очень тривиальны.

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

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

Пустая строка, автомат 'empty': echo '0' | fstcompile —acceptor > empty Звездочка, автомат 'star':cp empty starfor i in `cat alph`; do fstunion star $i stardonefstclosure 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 > r5fstunion r9_0 r9_1 > r9fstunion r12_0 r12_1 > r12 Правила 5, 9 и 12 являются составными. Я определяю каждую часть отдельно, а потом делаю объединение. Скрипт concat.sh всего лишь делает конкатинацию автоматов, переданных в аргументах:cp empty _cfor i in $*; do fstconcat _c $i _cdone;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 _cfor i in $*; do fstintersect _c $i _cdone;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}_contdone cp result outfor i in `ls *_cont`; do echo $i fstintersect $i out | fstrmepsilon — | fstdeterminize — | fstminimize — outdone rm differrm *_cont Этот скрипт формирует специальный авотомат для каждого слова из алфавита, и применяет его к результату. Таким образом, отметаются пути с повторяющимися словами. В итоге, финальный результат (а по сути, автомат 'out') выглядит так: Это частичное изображение автомата (все не влезло). Каждые пять слов определяют дом. Как видно из рисунка, немец разводит рыбок.

Заключение

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

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

  • finite state machine
  • regular expressions
  • logic
  • bash
  • openfst

Источник: https://habr.com/post/121061/

Логические задачки

Задачка про рыбку

Логические задачки

Логические задачи – это своеобразная «гимнастика для ума», средство для утоления естественной для каждого мыслящего человека потребности испытывать и упражнять силу собственного разума. В разделе представлен ряд занимательных задач из области математики, физики, естествознания, полюбившиеся многим задачи на взвешивание, задачи на нестандартное логическое мышление и многое другое.

Загадка про рыбку

Это, пожалуй, одна из самых известных загадок на логику. Считается, что ее придумал Альберт Эйнштейн. Он утверждал, что ее могут решить В УМЕ всего лишь 2% населения планеты. Только логика — и ничего больше.

Условия:

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

Кроме того:

  1. Англичанин живёт в красном доме.
  2. Швед держит собаку.
  3. В зелёном доме пьют кофе.
  4. Датчанин предпочитает чай.
  5. Зелёный дом — по соседству слева от белого.
  6. Курильщик «ПалМал» разводит птиц.
  7. В жёлтом доме курят «Данхел».
  8. Молоко пьют в доме посередине.
  9. Норвежец живет в первом доме.
  10. Человек, курящий «Мальборо», живёт рядом с хозяином кошки.
  11. Дом, где курят «Данхел», — рядом с тем, где держат лошадь.
  12. Любитель «Винфилд» пьёт пиво.
  13. Немец курит «Ротманс».
  14. Норвежец живёт рядом с синим домом.
  15. Тот, кто курит «Мальборо», живет рядом с тем, кто пьет воду.

Ответ:

желтыйсинийкрасныйзеленыйбелый
норвежецдатчанинангличаниннемецшвед
водачаймолококофепиво
ДанхелМальбороПал МалРотмансВинфилд
кошкалошадьптицырыбкасобака

Восемь пар и их книги

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

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

  1. Маша Иванова и ее муж работали продовцами-консультантами
  2. Книгу «Турецкий Гамбит» принесла пара, у которых были хонды и оба они любили красный цвет.
  3. Сережа и Катя, его жена, любили коричневый
  4. Люба и Юра Егоровы обожали белый.
  5. Света Петрова и ее муж работали логистами и водили шкоды.
  6. Наташа и ее муж Игорь взяли почитать «Ярмарку тщеславия».
  7. Саша и его жена любили розовый и принесли «Пеппи длинный чулок».
  8. Ира и Данила — менеджеры.
  9. «Алису в зазеркалье» позаимствовала пара, которая водит форды.
  10. Зайцевы — юристы. Они принесли «Парфюмера».
  11. Сидоровы — врачи. Они взяли «Фиесту».
  12. Иван и его жена любят зеленый цвет.
  13. Галине Соловьевой и ее мужу нравится синий.
  14. Константин и его жена принесли «Фиесту». Они водят лексусы.
  15. Одна пара принесла книгу «Три мушкетера», а взяли почитать «Пеппи длинный чулок».
  16. Пара, которая водит субару, любит фиолетовый.
  17. Бухгалтеры взяли почитать «Три мушкетера».
  18. Кассиры водят ниссан.
  19. Анна и ее муж водят опель и принесли «Ярмарку тщеславия».
  20. Они же взяли почитать книгу, которую принесли Хабаровы.
  21. Коля и его жена любят желтый. Они взяли почитать «Сто лет одиночества».
  22. Кривцовы работают программистами.
  23. «Сто лет одиночества» бвла принесена парой, которая водит лады.

Вопрос:
Как зовут супругов в каждой паре, их фамилии, марки машин, какой цвет любят, какую книгу принесли, а какую взяли почитать, кем они работают?
Ответ:

Фамилии и именаРод деятельностиМарка автоЛюбимый цветКакую книгу принеслиКакую книгу отдали
Саша и Маша Ивановыпродавцы — консультантыФордрозовыйПеппи длинный чулокАлиса в зазеркалье
Катя и Сережа СидоровыврачиЛадакоричневыйСто лет одиночестваФиеста
Люба и Юра ЕгоровыкассирыНиссанбелыйТри мушкетераПеппи длинный чулок
Света и Коля ПетровылогистыШкодажелтыйАлиса в ЗазеркальеСто лет одиночества
Наташа и Игорь ЗайцеввыюристыСубаруфиолетовыйПарфюмерЯрмарка тщеславия
Ира и Данила ХабаровыменеджерыХондакрасныйТурецкий гамбитПарфюмер
Иван и Анна КривцовыпрограммистыОпельзеленыйЯрмарка тщеславияТурецкий гамбит
Костя и Галя СоловьевыбухгалтерыЛексуссинийФиестаТри мушкетера

Условия:
В порте пять кораблей.

  1. Греческий корабль отчаливает в шесть. Он везет кофе.
  2. У корабля, который в середине — черная труба.
  3. Английский корабль отплывает в девять.
  4. Французский корабль, у которого синяя труба, пришвартован слева от корабля, который везет кофе.
  5. Справа от корабля, на котором груз какао, корабль, который плывет в Марсель.
  6. Корабль под бразильским флагом направляется на Манилы.
  7. Рядом с кораблем, на котором рис, — корабль с зеленой трубой.
  8. Корабль, плывущий в Геную, отходит в пять.
  9. Испанский корабль отплывает в семь и находится справа от корабля, плывущего в Марсель.
  10. Корабль с красной трубой направляется в Гамбург.
  11. Сидоровы — врачи. Они взяли «Фиесту».
  12. Рядом с кораблем, который отчаливает в семь, корабль с белой трубой.
  13. На крайнем корабле — зерно.
  14. Корабль с черной трубой отплывает в восемь.
  15. Корабль с зерном пришвартован рядом с кораблем, на котором груз риса.
  16. Корабль, следующий до Гамбурга, отчаливает в 6.

Вопрос:
Который корабль плывет в Порт-Саид? Который гружен чаем?

Ответ:

ФлагВремяГрузЦвет трубыПункт назначения
Французский5 ч.чайсинийГенуя
Греческий6 ч.кофекрасныйГамбург
Бразильский8 ч.какаочерныйМанилы
Английский9 ч.рисбелыйМарсель
Испанский7 ч.зернозеленыйПорт-Саид

Сады и садовники

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

  1. Они растят 12 разных растений.
  2. У кажого — по четыре разных растения.
  3. Каждое растение встречается, как минимум, в одном саде.
  4. Только одно растение встречается сразу в четырех садах.
  5. Только в одном саде — все три вида урожая.
  6. Только в одном саде — все четыре разных растения одного вида урожая.
  7. Персики растут только в двух соседних садах.
  8. Сад Павла — в центре. Лилий там нет.
  9. Тот, кто разводит астры, не выращивает овощи.
  10. Любитель роз, не выращивает петрушку.
  11. Садовник, у которого есть орехи, выращивает как тыкву, так и петрушку.
  12. В первом саде — яблоки и вишня.
  13. Вишня растет только в двух садах.
  14. В саде Александра — и лук, и вишня.
  15. Алексей выращивает два разных вида фруктов.
  16. Тюльпаны — только в двуха садах.
  17. Яблони растут только в одном единственном саде.
  18. Только в одном саде, том, что рядом с садом Петра, растет петрушка.
  19. Сад Александра — не крайний.
  20. Иван не выращивает ни овощи, ни астры.
  21. В саде Павла — три разных вида овощей.

Вопрос:
У кого какой сад, и что там растет?

Ответ:

Иванперсикияблокивишнярозы
Александрвишнялукрозытюльпаны
Павелморковьтыквалукрозы
Петрастрырозытюльпанылилии
Алексейперсикиорехитыквапетрушка

    задачки, логические задачки, решить задачку

Источник: https://mei-sonnen.ru/logicheskie-zadachki.html

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.