вторник, 6 сентября 2011 г.

Решение головоломки с хабра на Haskell

На днях на хабре проскочила заметка с одной простой, но изящной головоломкой.
Суть вкратце такова. Имеется автомат с пятью барабанами, где каждый барабан может принимать значение одной из карточных мастей (то есть, всего 4 положения). Каждый барабан руками можно вращать только в одну сторону на один шаг, при этом автоматически также могут вращаться остальные 4 барабана. Матрица таких вращений-сдвигов представлена ниже:
===
     1  2  3  4  5
    --------------
1:  +1 -1 +1  0  0
2:  +1 +1  0  0 -1
3:   0 -1 +1 -1  0
4:  -1  0  0 +1 +1
5:   0  0 -1 +1 +1
===
То есть, например, при вращении барабана N1 на один шаг (примем это направление за положительное), барабан N2 автоматически будет повернут на 1 шаг в обратном направлении, барабан N3 - так же как и барабан N1 - будет повернут на 1 шаг вперед, а положения барабанов N4 и N5 не изменятся.

Задача в следующем. Имеется начальное положение всех барабанов - 0 2 0 3 1, то есть, первый барабан в положении 0, второй - в 2, третий - в 0 и т.д.
Требуется найти такую последовательность поворотов барабанов, чтобы в итоге их положения приняли значения 0 0 2 0 0. Мы эту задачу чуть усложним и будем искать не просто последовательность, а последовательность минимальной длины.

Для решения будем использовать Haskell.

понедельник, 29 августа 2011 г.

Особенности GET-запросов в IE6

Давеча чуть было не тронулся рассудком ) Написал на javascript с использованием jQuery некий простой фрагмент кода, который работал в Firefox 6, но категорически не работал в IE6. Собственно, вот рабочий пример:
$(document).ready(function(){
     alert(1);
     $.getJSON('/test.php', function(d) {
	alert(2);	
     });
 });
Так вот, первый алерт в IE6 срабатывает, а второй - нет, хотя файл test.php исправно лежит в корне сайта и честно выдает корректный json на выход. То есть, такое впечатление, что просто не срабатывает вызов getJSON(). Думал, уже поседею )
Короче, в чем суть. IE6 каким-то образом (в отличие от других браузеров) по дефолту кэширует такого рода запросы. Возможно, это и всем известная вещь, но как-то я её совсем упустил из вида. В общем, радикальный способ решения проблемы следующий: указать для всех ajax-запросов из jQuery отключение кэширования на стороне клиента, например, вот так:
$.ajaxSetup ({ cache: false});
После этого всё работает (вроде бы :).

ps. Важное дополнение. Для IE6 имеет также большое значение правильное указание кодировки для возвращаемых данных. В случае, если данные в JSON находятся в utf-8, то в test.php следует прописать нечто типа такого перед выводом самих данных:
header('Content-Type: text/html;charset=utf-8');

воскресенье, 31 июля 2011 г.

Решение еще некоторых задач на Haskell

Недавно на free-lance.ru в одном из заказов обнаружил вот такое тестовое задание на определение базовых навыков в области программирования:

1) Find the largest palindrome (a palindrome is a number that reads the same in either direction, e.g. 1221) formed by the product of two three-digit numbers.
{Correct answer: 906609}

2) Find the sum of the digits in the number 100! (i.e. 100 factorial)
{Correct answer: 648}

3) Given a list of pairs of numbers e.g. [(1,4), (2,5), (7,3), (4,6), (7,7)] find the longest sub-list that has the pairs sorted by the first entry in ascending order by the second in descending order, [(2,5), (7,3)].

пятница, 1 июля 2011 г.

Решение задачи J финальной части конкурса ACM ICPC 2011

Всем привет. Давно не брал я в руки шашек (в смысле, не писал ничего полезно-тематического). Сегодня мы с вами попробуем решить одну из задач, представленных в финальной части чемпионата мира по программированию среди студентов ACM ICPC 2011. С условиями задач вы можете ознакомиться здесь http://cm.baylor.edu/digital/icpc2011.pdf

Решать будем задачу J (problem J), потому как она мне сразу понравилась своей простотой )) В качестве языка программирования будем использовать Haskell (вообще, насколько я понял, на конкурсе принимались решения только на C++ или Java, но так как мы с вами в конкурсе не участвуем, позволим себе такую вольность).

понедельник, 9 мая 2011 г.

С Днем Победы!

Всем привет.
Давно вообще ничего не писал, но вот сегодня появился повод, святой, как минимум, для каждого жителя бывшего Советского Союза. Именно в этот день 66 лет назад наша страна одержала победу в Великой Отечественной войне.

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

понедельник, 4 апреля 2011 г.

Фильм "Молодая Гвардия"

Посмотрел на днях художественный фильм "Молодая Гвардия", снятый в 1948 году. Вроде бы, когда-то смотрел его раньше, но то ли смотрел не очень внимательно, а скорее всего, просто в силу своего тогда юного возраста как-то не воспринимал его адекватно, что ли... В общем, тогда я не обратил на него внимания, к сожалению.

А недавно вот пересмотрел. Замечательный фильм. Кто не в курсе - фильм Сергея Герасимова по роману Александра Фадеева "Молодая Гвардия". Две серии смотрятся на одном дыхании. Отличная работа оператора (крупные планы в нужные моменты), музыка Дмитрия Шостаковича, отменная игра актеров - тут вообще удивительно, так как большая группа молодых актеров фильма на тот момент являлась студентами, но зато какими: Нонна Мордюкова, Вячеслав Тихонов, Георгий Юматов. Будущие звезды! Обратил внимание, что в роли Геннадия Почепцова снимался Евгений Моргунов. Также в фильме роль тетки Марины играет небезызвестная Клара Лучко. Ну а самое большое впечатление на меня произвела игра Владимира Иванова, исполняющего роль Олега Кошевого. По сути дела, эта роль сыграла с ним злую шутку, так как после съемок в этом фильме народ уже просто не воспринимал его в других ролях. Кроме того, с интересом узнал, что настоящая бабушка Олега Кошевого ходатайствовала за принятие в Коммунистическую Партию Владимира Иванова, как человека, который очень хорошо и правдоподобно исполнил роль её внука в фильме "Молодая Гвардия".

четверг, 17 марта 2011 г.

Firefox 4 и новые графические возможности

Тут в последнее время на хабре стали проскакивать тесты, в которых исследуются новые возможности HTML5. Ну и стало мне интересно, а как у меня с этим обстоит дело на Firefox 4 RC1 под Windows XP.

Запустил тест Canvas'а, и что я вижу ? Вижу, что производительность у меня ровно такая, какая характерна для Firefox третьей версии. Который, вроде бы, не имеет многих фич версии 4, позволяющих существовать более комфортно, если я правильно понимаю. Короче, на тесте FPS что-то в районе 30 максимум.

Загуглив, нашел (внезапно! :), что можно через about:support посмотреть текущее положение дел с настройками. Для блока "Графика" увидел, что Direct2D "заблокирован для вашего драйвера видеокарты. Попытайтесь обновить его до версии 257.21 или более новой". Материнка у меня на работе от Asus, видео встроенное на базе GeForce 8200.
Скачал свежие дрова под него (266.58_desktop_winxp_32bit_english_whql, то есть, версии 266.58), установил, снова полез в about:support. Теперь для Direct2D выводится скромное "false". Полез в about:config. Все настройки, касающиеся использования Direct2D включены... Загадки да и только.

Загуглив еще раз, выяснил, что этот самый Direct2D мало того, что доступен только начиная с Висты и дальше, так еще и для его использования в 4-ом Firefox-е нужна видеокарта с аппаратной поддержкой DirectX версии 10.

В общем, плюнул я на всё это дело и решил жить как и прежде )