пятница, 5 ноября 2010 г.

Haskell Platform 2010.2.0.0 и Cabal под Windows XP

Давеча столкнулся с интересной проблемой обновления пакетов в Haskell Platform 2010.2.0.0 (от июля 2010 года) под Windows XP. Изучал пример, в котором для перекодировки символов использовался модуль Encoding. Из коробки данный модель не входит в состав библиотек, поставляемых c Haskell Platform 2010.2.0.0.

Качать пакеты можно с http://hackage.haskell.org - хранилища различных пакетов модулей для хаскеля. Можно пробовать либо устанавливать пакеты вручную, либо использовать идущий вместе с хаскелем Cabal - средство для автоматической установки пакетов. Конечно, более интересным показался второй вариант. Тут же наткнулся на первые грабли.

вторник, 2 ноября 2010 г.

Размер среды окружения при запуске DOS задач в Windows XP

Общеизвестно, что при запуске DOS-приложений размер окружения (Environment) ограничивается по-дефолту вполне определенной величиной (в XP, например, это значение равно 256 байт, если я правильно понял ). Как это проявляется ? Ну, вот, например, у вас есть переменные среды, в том числе и PATH, которые заданы средствами Windows (Мой Компьютер => Свойства => Дополнительно => Переменные Среды). При запуске DOS-приложений стартует виртуальная машина DOS-задач NTVDM, которая запускает command.com, получающий из всего пула переменных среды блок размером в 256 байт. То есть, если PATH у вас был длинный (а такое часто случается при установке приложений в папку Program Files, которые добавляют в переменную PATH пути к своим бинарниками или либам), то для DOS-задачи он будет урезан.

суббота, 2 октября 2010 г.

Firefox 4 и русская локаль

Не так давно обновил у себя Firefox 3.6.10 на Firefox 4 Beta 6. Что-то, видимо, изменилось в настройках, не могу понять только, что именно. Смысл в чем. Встроенный поиск в Google
перебрасывает, почему-то, на молдавский домен google.md с латинской графикой.
Видимо, по-дефолту поиск идет на домене google.com, который уже в зависимости от страны или настроек пользователя перебрасывает последнего на локальный домен.
Пока решил это включением галки "предлагается на русском языке" на странице google.md (видимо, гугль садит какую-то куку), но как-то это не по-людски. Хотелось бы урегулировать проблему раз и навсегда. Полазил по настройкам Firefox'а в about:config. Нашел 2 параметра, которые отвечают за локаль:
1. Строчный параметр "general.useragent.locale"
Вроде бы, устанавливает локаль в юзерагенте браузера. Пробовал менять дефолтное "en-US" на "ru-RU" - без особого успеха.
2. Булевый параметр "intl.locale.matchOS". В случае True (по-дефолту выставлен в False) заменяет вышестоящий параметр тем, что выставлено в локали OS (если я правильно понял). Изменение его на "True" также результатов не дало.
Сталкивался ли кто с таким ? Интересно, как можно решить ?

вторник, 14 сентября 2010 г.

Решение задачи о поиске двух недублирующихся элементов в потоке

Всем привет. Нашел, наконец-то, красивое решение задачи о поиске 2-ух недублирующихся элементов в большом входном потоке целых чисел (см. концовку моего предыдущего поста). Своим умом, к сожалению, до этого решения не дошел, но так как решение очень красивое, и мне оно понравилось, привожу его ниже (кстати, еще раз убедился во вменяемости практически абсолютного большинства участников форума rsdn.ru :).

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

четверг, 2 сентября 2010 г.

Задача о поиске недублирующихся элементов в потоке

Недавно столкнулся с еще одной интересной задачей. Звучит она так: имеется входной поток целых чисел. Известно, что в нем все элементы дублируются, кроме одного. Найти этот один элемент за константное количество проходов (O(1)) , используя константное же количество памяти.
Первоначально пришла в голову идея использовать какой-то хэш-массив, в котором ключами будут значения элементов входного потока, а значениями - число вхождений того или иного элемента в поток. Сложность в том, что заранее неизвестно, в каком диапазоне числа входного потока. Если предположить, что размер int'а 32 бита, то в хэше возможно 2^32 элементов, что, в общем, достаточно круто )
Но затем неожиданно меня посетила неплохая идея: а что, если воспользоваться операцией XOR, для которой характерны следующие правила: A XOR A = 0 и 0 XOR A = A.
Тогда просто проксорив все элементы входного потока, мы получим на выходе значение недублирующегося элемента, ибо
             A XOR B XOR A XOR C XOR B = C
То есть, для решения задачи нужен всего 1 проход по всем элементам и одна переменная, аккумулирующая результат, что, согласитесь, неплохо.

А теперь внимание. Как можно решить задачу, если в потоке не один недублирующийся элемента, а два ? Мне пока что-то ничего в голову не приходит.

вторник, 10 августа 2010 г.

Почему нас так не любят за рубежом ? )

Лазил на днях по гуглю и нашел сервис Omegle, предоставляющий возможность пообщаться tet-a-tet с каким-нибудь случайным человеком (есть мнение, что таких сервисов достаточно много, но речь сейчас не об этом). Сервис забугорный, поэтому общение предполагает быть на инглише.
Май инглиш из вэри бэд, но всё равно попробовал ради шутки посмотреть, что получится. Ниже привожу логи 2-ух моих непродолжительных бесед с 2-мя разными представителями дальнего, как я понимаю, зарубежья.

четверг, 29 июля 2010 г.

Задача о картине, веревке и гвоздях

Недавно с помощью знакомого откопал, как я понимаю, старую задачу, условие которой формулируется следующим образом: Имеется картина, к которой обоими концами прикреплена длинная веревка. Необходимо повесить её на стене с помощью N гвоздей таким образом, чтобы при удалении любого (одного) гвоздя картина и веревка падали.

Для случая, когда гвоздь всего один, задача решается элементарно.
Будем разбираться, как её решить для 2-ух и более гвоздей. Рассмотрим ситуацию с 2-мя гвоздями. Обозначим их A и B. Введем операции (+) и (-), когда веревка обматывает гвоздь по часовой и, соответственно, против часовой стрелки. Таким образом, A + B означает, что гвозди A и B обмотаны веревкой по часовой стрелке 1 раз (по отдельности или вместе - в данном случае это не играет особой роли).
Также понятно, что A + (-A) = 0, так как мы оборачиваем гвоздь А по часовой стрелке, и тут же снимаем с него веревку против часовой стрелки. Итоговое значение 0 означает, что картину с веревкой ничего не удерживает, и они гарантированно упадут.
Удаление гвоздя будем отмечать заменой соответствующей буквы на число 0 (гвоздь перестает играть роль в процессе удержания картины). Таким образом, для того, чтобы условие задачи выполнялось, необходимо получить такую формулу, когда замена какой-либо одной (любой) буквы, обозначающей гвоздь, приводит всю формулу к нулевому значению.