Найти тему

'Сшивка'. Загадка Эйнштейна

17 декабря 1962 года в журнале Life опубликовали головоломку, текст который приведен ниже:

  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. Есть 5 объектов класса "Дом"

Имея только эту информацию считаем их одинаковыми, но только нумеруем, чтобы хоть как-то отличать. Нумерация убирает идентичность объектов (функций 'Сшивки'), делает модули уникальными в разрезе текущей задачи. Иначе формирование дальнейших семантических/ресурсных связей будет хаотично, запутанно и не приведет к желаемому результату.

Файл db.txt будет выглядеть так:

Дом1
-
-
Дом2
-
-
...
Дом5
-
-

2. Один из домов имеет красный цвет

Допустим что это будет Дом1.

Дом1
-цвет_красный
-
цвет_красный

И тут сразу возникает вопрос - цвет (тип параметра) дома это входной или выходной параметр функции?

Еще интереснее про англичанина - как выразить в виде его параметра "дом красного цвета" да еще связать его с Дом1 у которого цвет это параметр? Дом1 -Дом5 это функции, а не параметры - к ним связей не предусмотрено.

Нужны синонимы, но, скорее всего, тут без подсистем и без того, что программисты называют объектно-ориентированное программирование не обойтись.

Англичанин
-
живет-в_дом-красного-цвета
-живет-в_дом-красного-цвета

Здесь так имеется вопрос про вход и выход модуля.

Так как задача скорее абстрактная, то надо переходить к семантическим связям - логике предикатов. Блоки-функции в данном случае являются Классами, которые объединяют набор параметров как логическая операция И. Имеется иерархия классов, наследование параметров и их типов. Параметры (поля классов) имеют лишь направление в семантическом графе. Возможны параметры связанные с функциям, а не с их параметрами (ссылки на объекты).

Семантику в данном случае проще изобразить:

Англичанин проживает в доме красного цвета
Англичанин проживает в доме красного цвета

3. Про испанца

Испанец держит собаку
Испанец держит собаку

4. Кто-то в зеленом доме

Тут система посложнее, потому что объектов и отношений больше. Но все решаемо!

В доме зелёного цвета пьют кофе
В доме зелёного цвета пьют кофе

Пришлось вводить объект "Чел 1" (кто-то) типа "Человек". Национальности не знаем. Он пьет напиток "Кофе".

5. Украинец

Украинец любит чай
Украинец любит чай

6. Первое соединение двух высказываний

Дом зелёного цвета расположен сразу справа от дома белого цвета
Дом зелёного цвета расположен сразу справа от дома белого цвета

По итогу 6 высказываний схема выглядит так:

Загадка Эйнштейна. П.1-6
Загадка Эйнштейна. П.1-6

Модуль2 (Продолжение).