Рубрика «haskell» - 20

Поиграем в слова: создаём бота игрока на языке HaskellСегодня мы поучимся программировать на языке Haskell простейшие интерактивные игры. Для этих целей воспользуемся одной наработкой, которая ранее была описана мною в заметке «Утилита для работы с N-граммами». Ну а разработаем мы консольную игру «в слова» — довольно простую программу, которая будет ожидать от игрока ввода слов на ту или иную тему так, чтобы первая буква введённого слова совпадала с последней буквой того слова, которое назовёт программа.

В числе самых верхнеуровневых требований выдвинем следующие:

  • Программа должна быть исполнена в виде консольного приложения с диалоговым режимом.
  • Вместе с тем она должна быть в меру дружественна к пользователю.
  • Программа должна позволять играть в слова на различные темы, а список тем формируется игроком в процессе использования.
  • Программа должна обучаться в процессе игры, подразумевая, что игрок — человек, обладающий полным знанием естественного языка (сильное предположение, но это лучше, чем ничего :).
  • Программа должна иметь несколько стратегий игры — от самой лёгкой до довольно сложной; также должна быть возможность смены стратегии в процессе игры на основании каких-либо критериев.

Вот с этим багажом и начнём. В описании, как всегда, воспоследуем принципам модульности и разработки сверху вниз.

Читать полностью »

в 16:24, , рубрики: haskell, sublime, sublime plugin, метки: , ,

В рамках знакомства с плагинами Sublime Text 2, добавил в SublimeHaskell несколько новых возможностей и багфиксов. Автор пока занят, поэтому pull request в подвешенном состоянии, забрать можно на гитхабе.

image
Читать полностью »

Шарики и дырки — один из вариантов плотной упаковки на языке HaskellТрадиционный конкурс по функциональному программированию, который ежемесячно проводится под эгидой ФП(ФП), в октябре выдался неудачным. Неудачи сопутствовали с самого начала и до конца. Мало того, что вызвавшийся ещё в начале прошедшего лета соорганизатор не смог подготовить задачу, так он ещё и пропал (видимо, как и грозился, уехал на сборы, но не уведомил). А в резерве у меня ничего не было, поэтому пришлось готовить задачу в экстренном порядке. В итоге задача, по всей видимости, показалась потенциальным конкурсантам достаточно сложной — то ли условия были сформулированы кое-как, то ли ещё что. В общем, в конкурсе принял участие всего один человек, который представил решение на языке Haskell, при этом он утверждает, что учил язык специально для этого случая.

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

Читать полностью »

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

Вот так выглядит 700:
Диаграммы разложения на простые множители

По расположению точек несложно заметить, что всего их здесь 7*5*5*2*2.

Далее описание того, как это работает.
Читать полностью »

Меня давно беспокоит одна тема. Вот решил высказаться и услышать, что думают люди по этому поводу. Речь пойдет о функции hGetContents. Если вы когда-нибудь работали с файлами, то вы знаете, что эта функция возвращает содержимое файла (потока). Вот типичный пример использования этой функции.

import System.IO

main = do 
	file <- openFile "1.txt" ReadMode
	content <- hGetContents file
	print content
	hClose file
-- результат: выводит содержимое файла на экран

Читать полностью »

Через тернии к Haskel (перевод). 2/2

Вторая часть ПЕРЕВОДА короткого и жесткого введения в Haskell. С первой можно ознакомиться здесь

Оригинал здесь

Читать полностью »

Через тернии к Haskell (перевод). 2/2

Вторая часть ПЕРЕВОДА короткого и жесткого введения в Haskell. С первой можно ознакомиться здесь

Оригинал здесь

Читать полностью »

Через тернии к Haskell. 2/2

Вторая часть короткого и жесткого введения в Haskell. С первой можно ознакомиться здесь

Читать полностью »

Через тернии к Haskell. 1/2

tl;dr: Очень краткое и сжатое введение в Haskell.

Читать полностью »

Поиск скрывающегося Доктора X среди пациентов — решение более сложных логических задачВ сентябре на традиционном конкурсе по функциональному программированию, проводимому под эгидой ФП(ФП), была выставлена задача, продолжающая тему адекватности душевного состояния различных субъектов. Но если в августе конкурсанты решали более или менее простую логическую задачу, то на этот раз в условиях было вставлено немного случайности — среди здоровых и психически больных людей затерялся субъект, который «играл» с исследователями, а потому истинность его суждений могла принимать значение как 1, так и 0. В общем, условия задачи были таковы:

Давненько санитарам первой городской больницы уездного города N не приваливало столько работы. Подумать только — город-здравница; город, в который приезжали лечиться со всех концов необъятной страны; город, известный чистотой воздуха, прозрачностью воды; и вдруг — массовое пищевое отравление, причём настолько массовое, что пришлось разворачивать целый палаточный городок, чтобы разместить всех пациентов — 435 человек.

Главный врач был первым, кто заметил неладное — уже к вечеру второго дня. Странные взгляды, которые бросали некоторые пациенты, непонятные смешки, волнами перекатывающиеся по больничному комплексу. На третье утро врачи обнаружили, что ночью часть пациентов оказалась обрита на лысо с выбритым на затылке символом. К обеду пришли известия о том, что среди пострадавших от отравления отдыхающих оказалось и более двух сотен человек, проходивших лечение в различных психиатрических стационарах страны и собранных в городе N в ходе полузасекреченного эксперимента «В здоровом теле — здоровый дух».

Поскольку в ходе госпитализации были допущены некоторые нарушения, то отличить психически здоровых людей от психически нездоровых по документам оказалось невозможно. Единственно доступной информацией является информация, полученная путём опроса пациентов — каждый из них составил список из нескольких человек, в психическом состоянии которых он уверен. Ситуация осложняется тем, что среди пациентов находится и таинственный Доктор X — идеолог и основоположник проекта «В здоровом теле — здоровый дух». Доктор Х, являясь мастером человеческой психики, может гениально изображать любое поведение так, что и нормальные и психически нездоровые пациенты не способны дать ему адекватную оценку, они будут видеть только то, что Доктор Х хочет чтобы они видели. В данном случае Доктор X развлекается и для общения с любым человеком бросает монетку. Точно такой же способ Доктор Х использовал и для заполнения своего листа опросника.

В ходе заполнения этих опросников был обнаружен и дневник Доктора Х, из которого стало ясно что художественно обрил часть пациентов именно он, но о причинах можно только догадываться. Текст, который удалось разобрать гласит — «Сначала здоровые в алфавитном порядке, а потом мои драгоценные пациенты в обратном, построить в 31 колонну по 14 рядов».

Необходимо отметить, что данную задачу и задачу на проверку общности алгоритма разработал, а сам конкурс организовал наш добрый коллега Михаил Байков, который подвизался на поприще коммерческой разработки информационных систем на языке программирования Haskell. Далее представлены его решения для генерации задания и для поиска ответа.

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

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js