Тем временем я продолжаю почитывать книги по искусственному интеллекту и нахожу в них массу интересных вещей. В этой заметке я предлагаю вашему вниманию задачу о роботе-пылесосе, которая формулируется примерно следующим образом.
Вы когда-нибудь пробовали написать программу, решающую судоку, задачу о волке, козе и капусте или головоломку вроде кубика Рубика? У этих задач есть кое-что общее — точно известно начальное условие и к какому условию требуется прийти, но придумать алгоритм решения задачи не так-то просто. Такие задачи решаются с помощью поиска на графах.
На страницах Википедии, посвященных определенному языку программирования, приводится информация о том, на какие языки он оказал влияние и влиянию со стороны каких языков подвергся. Например, Haskell исптытал влияние со стороны Lisp и ML, повлияв при этом на Scala, Perl 6 и Python. Интересно, а что будет, если нарисовать граф отношения «язык X повлиял на язык Y»?
Недавно в блоге Даркуса была поднята тема генерации уникальных текстов, содержащих в себе некоторый смысл. То есть речь идет о генерации нормальных текстов, вроде того, что вы читаете в данный момент, а не простой мешанины из слов. Тема меня «зацепила» и со второй попытки мне удалось написать довольно неплохой, как мне кажется, генератор. Однако, будучи блогером-графоманом, начну я немного издалека…
Мне почему-то всегда казалось, что хэши в Perl, несмотря на название, реализованы в виде бинарных деревьев, а не хэш-таблиц. Как бы дико это ни звучало. Вероятно, это связано с тем, что в STL контейнер std::map обычно реализуется в виде красно-черного дерева, и я ошибочно предположил, что в Perl сделано так же. Но недавно я обнаружил, что в книге «Programming Perl» недвусмысленно утверждается обратное.
На прошлой неделе я в очередной раз принял участие в конкурсе по функциональному программированию от _darkus_‘а. В этой заметке вы найдете постановку задачи, ее решение, а также кое-какие мои наблюдения касательно ФП.
В рамках серии экспериментов с прокачкой мозгов, я решил принять участие в небольшом программистском конкурсе от Романа Душкина. И я не без удовольствия воспринял новость о том, что вошел в пятерку победителей, полностью решивших задачу (места не пронумерованы, но если бы были, то я бы точно занял не первое и не второе место).
В ходе экспериментов с функциональным программированием я решил написать генератор лабиринтов. Приведенный код не претендует на элегантность или возможность практического применения где-то, кроме как в компьютерных играх. Тем не менее, для людей, постоянно занимающихся прокачкой своего умения программировать, этот пост может быть весьма полезен.
После написания заметки о генераторах фракталов, меня посетила одна идея. В свое время я интересовался автоматическим распознаванием капч (которые captcha). Так вот, распознавание происходит в несколько этапов. Текст капчи отделяются от фона, вычищается от мусора, нарезается на буквы. Затем буквы приводятся к одному размеру и используются для обучения нейронной сети. Притом первый шаг — отделение текста от фона, как правило, является довольно простым.
Вопреки распространенному мнению, фракталы — это не только красивые картинки. Фракталы используются в математическом моделировании, голливудских спец-эффектах, алгоритмах сжатия и много где еще. Далее по тексту вы найдете описание нескольких программ-генераторов фракталов с открытым исходным кодом. Их можно использовать как в учебных целях, так и для убивания времени или генерации красивых обоев. Бесспорно, это очень полезный софт!