Как стать автором
Обновить

Комментарии 43

И все-таки на Прологе такие задачки быстрее все описываются.
Не то что на brainfuck'е.
Пожалуй. Но я по этому и поместил ее в «ненромальное» программирование. ;)
Капитан Очевидность говорит нам, что пролог — специализированный язык для решения логических задач. Естественно, что описание этой задачи на нём быстрее.
Вообще, изначально хотел обойтись только регекспами. Но количество строк для перебора слишком велико.


Логика задачи сильно напоминает логику судоку, достроить всю картинку по имеющимся минимально необходимым данным.
Разрешите поинтересоваться — на чем рисунки делались? :-)
В openfst входит утилитка fstdraw. Она конвертит автомат в dot-файл формата graphviz. Этот файл затем рендерится в png (или ps, svg...):
fstdraw --acceptor --isymbols=alph.st out out.dot
dot -Tpng out.dot >out.png
> dot -Tpng out.dot >out.png
если интересовавшемуся мсье лень зайти под линь, то
dot -Tpng -oout.png out.dot

и вообще, у graphvis очень годный ман. всем бы такие.
я из решения на википедии не понял, почему красный дом не может быть первым, потому что там живет англичанин. Религия не позволяет или почему?
Можно попробовать решить самостоятельно, хотя бы на бумаге.
Два первых условия:
1. Норвежец живёт в первом доме.
2. Англичанин живёт в красном доме.
Красный дом не может быть первым, потому что в красном доме живёт англичанин, а в первом доме живёт норвежец.
Я думаю в условии подразумевается, что двойной национальности нету неукого.
ааа. деградирую…
P.S. наивно считал, что смогу решить в уме и войти в 2% умников =(
Норвежец живёт в первом доме.
Англичанин живёт в красном доме.
значит красный — не первый
Кстати, загадка носит название «загадки Эйнштейна»,
хотя на самом деле он никакого отношения к ней не имеет.
автор так и написал :)
Вы правы :) Я написал об этом в самом начале.
Хотел узнать для решения каких задач Вы обычно используете пролог?
Только академический интерес или же коммерческие разработки тоже существуют?
Не работал на прологе, поэтому такие вопросы.
Я не использую пролог :)

Ну, в принципе язык интересный. Однако писать что-то практическое на нем сложно. Разве что использовать как часть какой-то системы принятия/поддержки решений. И даже в этом случае чаще используются другие решатели.

Но просто чтобы поиграть с логикой первого порядка — пролог замечательная вещь.
В школе решал эту задачку спокойно и полагал что вхожу в 2% этих самых. Только потом прочитал, что решать надо в уме.
НЛО прилетело и опубликовало эту надпись здесь
Около 20% могут дать правильный ответ не думая. Если серьезно, то мне кажется, что 2% это сильно преувеличенное значение.
держать в уме 5 таблиц 5x5 действительно не просто.
фактически 16 байт информации, однако требует большой концентрации.
Может потому что мозг хранит информацию не битами, а отдельными значениями? это получается 125 единиц табличных данных, плюс 25 отдельных сущностей, плюс какой-то лог. А для того чтобы не насиловать мозг, можно сначала поупражняться на задачках размерностью 3 и 4.
Задачку даже с бумажкой и ручкой далеко не все могут решить однозначно — без предположений типа «допустим в этом доме...». А про решение в уме таки и вовсе… шахматисты, наверное, могут на раз-два)
Может, Вы хотели сказать: «Около 20% могут угадать правильный ответ, не думая»?
вы правы. если национальностей 5, то вероятность попадания в правильный ответ 20%. но умное лицо еще не признак ума.
А я эту задачку решал составлением таблиц в экселе, ушло всего каких-то 6 часов.
Школьникам на олимпиадах по математике часто подобные задачки дают. В наших краях — с ограничением по времени в 4 часа на 8 задач. И ничего, многие решают менее чем за полчаса. Без всяких экселей.
Почти любой человек может ее решить за полчаса с помощью смекалки, но вот разработать методологию решения — это задача на уровень выше.
Я решал на бумажке «методом судоку». Писал программу ни Си, которая делает тоже самое почти тем же методом. Жду пока кто-нибудь решениие на Brainfuck'е сделает, если это возможно, конечно.
Конечно, на Brainfuck'е это можно решить. Он, как и Си — Тьюринг полный.

А регулярные выражения (или язык, что одно и тоже) — на несколько ступеней ниже. Вот по этому мне и было интересно решить загадку таким методом.
Я в курсе, что Brainfuck — Тьюринг полный, но вот страшно представить сколько кода на BF будет…
Да, думаю много.
я 98ой.
объясните, пожалуйст, как получилось пересечение регекспов.
ответил ниже…
Я пересекал не регекспы, а соответствующие им автоматы.

Давайте поясню. Вот есть у меня два регекспа
A: 1*
B: *2
С: 1*2

Пересечением A и B будет С. Вобщем, то это не сложно понятно. Их пересечением будет все, что начинается на 1, заканчивается на 2.
Но есть проблема — у меня нет правил как из A и B получить их пересечение C.

Для этого я беру автоматы для A и B (которые полностью эквивалентны регулярным выражениям) и строю их пересечение.

A:


B:


C:


Автомат C — то же самое что и регулярное выражение С.

Решите тогда уж этот частный случай: darnley.livejournal.com/25666.html

1. Каждый день в домике, имеющем чётный номер, преподаватель собирает кубик Рубика, попивая молоко.
2. Преподаватель, программирующий на Хаскеле, иногда для смеха объявляет функцию tea — в честь своего любимого напитка.
3. Однажды преподаватель, играющий на скрипке, облил смычок своим любимым персиковым соком.
4. Преподаватель, чьё хобби — чистить трубы, программирует на функциональном языке программирования.
Забавно :) Но этим методом будет сложно, там контекстных правил много.
Если добавите кармы до 5 опубликую топик с решением задачи на Haskell.
плюсанул
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории