Тот, кто курит Winfield, пьет пиво.
Тот, кто выращивает лошадей, живёт в синем доме.
Норвежец живёт рядом с синим домом.
Швед выращивает собак.
Тот, кто курит Pall Mall, выращивает птиц.
Сосед того, кто курит Marlboro, пьёт воду.
Тот, кто живёт в центре, пьёт молоко.
Немец курит Rothmans.
Тот, кто живёт в жёлтом доме, курит Dunhill.
Тот, кто курит Marlboro, живёт рядом с тем, кто выращивает кошек.
Датчанин пьёт чай
Зелёный дом находится слева от белого, рядом с ним.
Англичанин живёт в красном доме.
Норвежец живёт в первом доме.
Для удобства приведу здесь текст загадки:
Сама идея не моя, услышал ее в одной видеолекции. Однако, там ее решали слишком уж изощренно. Я попытался решить ее более просто и прямолинейно.
Ее можно решить на бумаге или в уме, последовательно исключая неподходящие варианты. Однако, ее также можно решить более технично. Один из способов написать программку на прологе. Но здесь я хочу ее решить используя более простые механизмы регулярные выражения. А именно, перевести условия загадки на язык регекспов и свести задачу к поиску подходящей строки во всем допустимом наборе строк. Кстати, этот набор строк показан на рисунке.
Многие сталкивались с головоломкой про пять разноцветных домов, в каждом из которых живет человек со своими любимыми животным, напитком и сигаретами. Эта загадка приписывается Эйнштейну, хотя прямых подтверждений этому нет. Полный текст этой головоломки .
Кто разводит рыбок? Или решение загадки Эйнштейна регулярным языком
Кто разводит рыбок? Или решение загадки Эйнштейна регулярным языком / Хабрахабр
Комментариев нет:
Отправить комментарий