Найти тему

Решаем загадку Эйнштейна-Кэролла с помощью эксель

Оглавление

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

На википедии доступна фотография первой печатной статьи с этой задачкой в журнале Life от 1962 года, ниже будет перевод.

Журнал "Life International" 17 декабря, 1962, общественное достояние.
Журнал "Life International" 17 декабря, 1962, общественное достояние.

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

Забавно, на английском эта задача называется Zebra puzzle - задача про зебру.

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

Условия задачи

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

Некоторые посылки из условия задачи очевидны, например:

-2

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

Делаем помощника для решения

Если вы не входите в 2% тех, кто может решить задачу в уме, то вам понадобится куда-нибудь записывать свои рассуждения. Сделаем это в эксель.

Смотрите видео - или читайте статью, как вам удобнее!

Сначала выпишем на отдельной вкладке все возможные параметры - цвет, напиток, животное, сигареты, национальность:

-3

На основной вкладке расчертим табличку:

-4

Слева мы разместили рабочую область, где можно будет указать значения параметров, справа - условия задачи для наглядности. Как "нулевое" правило, я добавил неявное указание, что все параметры уникальные, не повторяются.

С помощью инструмента "Проверка данных" (подробнее о нем можно почитать здесь и здесь) добавим выпадающий список для каждой строки рабочей области, взяв данные из списка во второй вкладке.

-5

Теперь добавим ряд проверок, чтобы показывать соответствие введенных данных условиям задачи:

-6

В C24 укажем формулу:

=ЕСНД(ПОИСКОПЗ(B24;$B$2:$F$2;0);"")

=IFNA(MATCH(B24;$B$2:$F$2;0);"")

И растянем эту формулу вниз. Только для каждой новой группы параметров нам нужно поменять диапазон, в котором мы ищем. Для цвета дома: $B$2:$F$2, для напитка: $B$3:$F$3, для животного $B$4:$F$4 и так далее.

Эта формула показывает номер дома, для которого указан параметр (цвет, напиток, животное, сигареты, национальность). Если этот праметр не указан, то ошибка отлавливается с помощью функции ЕСНД (IFNA), и возвращается пустая строка. Если параметр указан несколько раз - определяется только первый дом, для которого он указан.

В D24 укажем формулу:

=ЕСЛИ(C24="";"";СЧЁТЕСЛИ($B$2:$F$6;B24)<2)

=IF(C24="";"";COUNTIF($B$2:$F$6;B24)<2)

И скопируем эту формулу вниз. Формула возвращает ИСТИНА (TRUE), если параметр указан в таблице один раз, ЛОЖЬ (FALSE), если два или более, и ничего, если не указан.

Вот что получается:

-7

Было бы здорово, если бы в табличке тоже подсвечивалось, если мы что-то ввели повторяющееся. Добавим условное форматирование - пометить красным дубликаты.

-8

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

-9

Сами формулы переписывать здесь не буду, покажу только картинкой. Укажу лишь несколько:

Для ячейки E27 (правило номер 2, проверка параметра "красный")

  • =ЕСЛИ(C27="";"";C27=C44) или на английском =IF(C27="";"";C27=C44)

Для ячейки N34

=ЕСЛИ($C$34="";"";ЕСЛИ($C$42="";ЛОЖЬ;OR($C$34=$C$42+1;$C$34=$C$42-1)))

или на английском

  • =IF($C$34="";"";IF($C$42="";FALSE;OR($C$34=$C$42+1;$C$34=$C$42-1)))

Если будет желание, можете посмотреть в конце статьи будет выложен готовый файл Эксель:

-10

Эти формулы напротив соответствующего параметра будут показывать ИСТИНА, ЛОЖЬ или пустую ячейку, в зависимости от того, выполняется правило или нет, или если данные не введены.

Кстати, было бы здорово, подсвечивать правила зеленым или красным - в зависимости от того, правильно заполнены данные или нет. Для этого справа от правил сделаем две колонки: в первой мы будем считать количество "ЛОЖЬ" в соответствующем правиле. Формула для первой колонки:

=СЧЁТЕСЛИ(СМЕЩ($D$24;0;СТРОКА()-1;25;1);ЛОЖЬ)

=COUNTIF(OFFSET($D$24;0;ROW()-1;25;1);FALSE)

А во второй - количиство "ИСТИНА". Формула для второй колнки отличается только тем, что вместо ЛОЖЬ там ИСТИНА :

=СЧЁТЕСЛИ(СМЕЩ($D$24;0;СТРОКА()-1;25;1);ИСТИНА)

=COUNTIF(OFFSET($D$24;0;ROW()-1;25;1);TRUE)

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

-11

На этом все! Инструмент готов :-) Его можно скачать по ссылке: https://yadi.sk/i/hY37WqhqEIuY4A

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