воскресенье, 4 апреля 2010 г.

Делюсь ресурсами

1. Cheat-Sheets.org - Замечательный сайт IT шпаргалок. Содержит шпоры по огромному числу языков программирования, технологий и прочему.

2. Wotsit.org - Сайт с множеством описаний различных форматов файлов. Частенько использую для получения неофициальной информации по форматам.

3. Koders.com - База данных исходных кодов на разных языках. Указаны типы лицензий.

Продолжение следует . . .
Читать дальше

Почему пишут ++i вместо i++. Простейшее объяснение.

Наиболее простое описание, почему иногда лучше использовать ++i нежели i++. Я просто приведу пример с перегрузкой префиксного(++i) и постфиксного(i++) операторов в неком классе Alpha.
class Alpha
{
public:
Aplha & operator++ (); // префиксная форма (++alpha)
Alpha operator++ (int); // постфиксная форма (alpha++)
};
Отличие сразу бросается в глаза. Теперь, если вы знаете что такое &, то вам понятно какой из операторов быстрее отработает в случае большого sizeof(Aplha).

Но наиболее важной частью сего поста я считаю данную ссылку:
1. C++ FAQ Lite: C++ FAQ Lite
2. Конкретно про i++ и ++i: C++ FAQ Lite 13.14
Читать дальше

суббота, 3 апреля 2010 г.

Top 25 программистских шуток про Чака Норриса

Перевод сообщения "The Ultimate Top 25 Chuck Norris «The Programmer» Jokes" из блога {сodesqueeze} (копия):

1. Когда Чак Норрис выбрасывает исключение, оно пролетает через всю комнату.

2. Все массивы, объявляемые Чаком Норрисом имеют бесконечный размер, потому что Чак Норрис не знает границ.

3. Для Чака Норриса не существует задержки диска, потому что диск чертовски торопится.

4. Чак Норрис пишет код, который оптимизирует сам себя.

5. Чак Норрис не может проверять на равенство, потому что он не имеет равных.

6-а. Чаку Норрису не требуется сборщик мусора, потому что он не использует .Dispose(), он вызывает .DropKick().

6-б. Чаку Норрису не требуется сборщик мусора, потому что он не высвобождает память, а лупит по ней ногой с разворота.

7. Первая программа Чака Норриса была kill -9. (Прим.пер. описание kill -9)

8. Чак Норрис лопнул пузырь доткомов. (Прим.пер. Dotcom Bubble)

9. Все браузеры поддерживают шестнадцатеричные константы #chuck и #norris для чёрного и голубого цветов.

10. MySpace на самом деле не ваше пространство, оно Чака - он лишь позволяет вам использоваться им.

11. Чак Норрис может написать бесконечную рекурсивную функцию ... и заставить её завершиться.

12. Чак Норрис может решить Башни Ханоя в один ход.

13. Единственный паттерн проектирования известный Чаку Норрису - Божественный объект. (Прим.пер. God Object)

14. Чак Норрис прошёл World of Warcraft.

15. Руководители проекта, не пытайтесь оценивать Чака Норриса ... никогда.

16. Чак Норрис не пишет в соответствии с веб-стандартами, так как веб всегда будет соответствовать ему.

17. "Она работает на моей машине" всегда справедливо для Чака Норриса.

18. "Маркерные доски" имеют белый цвет, потому что белеют от ужаса перед Чаком Норрисом. (Прим.пер. Whiteboard)

19. Чак Норрис не использует схем Burn Down, он предпочитает таблицы Smack Down. (Прим.пер. Burn down chart + Smack Down)

20. Чак Норрис может удалить корзину.

21. Борода Чака Норриса может печатать 140 символов в минуту.

22. Чак Норрис может проводить модульное тестирование всего приложения с одним единственным assert-ом.

23. Чак Норрис не ведёт охотиту за багами, потому что слово "охота" допускает возможность неудачи. Чак предпочитает убивать баги.

24. Клавиатура Чака Норриса не имеет клавиши Ctrl, потому что никто и ничто не контролирует Чака.

25. Когда Чак Норрис занимается веб-серфингом веб-сайты отображают сообщение "Предупреждение: Internet Explorer счел этого пользователя вредоносным или опасным. Вы действительно хотите продолжить?".

Знаете другие? Комментируйте ...

Читать дальше

четверг, 1 апреля 2010 г.

Задачка про уникальность

1. Имеется массив чисел конечной длины. Все числа в нём присутствуют ровно в двух экземплярах. И лишь одно число присутствует в единственном экземпляре. Необходимо за минимальное(конечное) число проходов по массиву определить значение этого уникального числа.

2. Решить ту же задачу, только теперь имеется два уникальных числа.

(Задачку позаимствовал у Смола)

UPD: Александр, на память ограничения не накладываются. Желательно использовать разумное количество памяти. Может получиться, например, прямая зависимость между используемой памятью и сложностью алгоритма(число операций), тогда это стоит отдельно обговорить в ответе.

UPD_2: Для поиска одного из чисел используется операция XOR для всех элементов массива. В результате пары элементов дадут нули, а уникальное число останется в результате.

Для поиска 2-х числе необходимо использовать следующий алгоритм:

При первом проходе считать 2 различных XOR-а, в один складывать числа большие 0x80000000, а в другой - меньшие.

Если обе XOR-суммы не равны нулю, то оба XOR-а равны соответствующим уникальным числам.

Если один из XOR-ов равен нулю, то диапазон на котором XOR не равен нулю снова делится пополам.

В результате число проходов пропорционально логарифму разрядности чисел, то есть O(log2(sizeof(n))).

Читать дальше