Ненормальное программирование

индекс
287,20

В чём смысл?

	SomeFunction()
	{
	    ...
	    if (false)
	    {
	        ...
	    }
	    ...
	}
	

Зачем может быть нужен блок if (false)?

Предположим, что:
  1. Это не ошибка и не забывчивость.
  2. if и false — это именно оператор условия и логическая ложь, а не какие-то хитрости с макросами\строками и т.д.

Пару вариантов ответа под катом. Желающие высказать свои идеи приглашаются мимо отгадки сразу в комментарии.
10 февраля 2012, 13:58
8

Русская рулетка с использованием Kinect



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

+52
6 февраля 2012, 16:25
30

Синхронное выступление мини-квадрокоптеров



Сейчас разработчики из разных стран мира стараются изо всех сил, создавая программное обеспечение для разного рода роботов. В том числе, и для квадрокоптеров с «интеллектом». На днях была представлена новая разработка от компании KMel Robotics и Пенсильванского университета, которая демонстрирует определенные успехи в развитии ПО для взаимодействия роботов.

+115
1 февраля 2012, 11:01
123

DOOM на калькуляторе

Год назад уже была новость про запуск чернобелого Doom на калькуляторе. На днях умельцы с Hack a Day портировали DOOM на TI-nspire CX, добившись цветной картинки. Теперь игру не отличить от компьютерной версии:

+18
22 января 2012, 14:15
14

Симплекс Серпинского



Данная статья предназначена для ознакомления с базовой математической составляющей компьютерной многомерной графики. На примере симплекса Серпинского в статье рассматриваются вопросы построения, перемещения, проецирования и отображения сложных многомерных геометрических фигур.
Также имеются картинки, видео, исходники, и уверяю вас, что всё очень просто, читайте, вникайте.
+111
21 января 2012, 03:13
240

Новогодний квест: разбор

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

Один из самых частых отзывов на мои паззлы и загадки — ой, классно, но очень уж сложно, нам бы что попроще… Поэтому первые несколько уровней я старалась делать простыми и/или классическими, чтобы не остужать интерес игроков с самого начала. Затем шло несколько уровней, основанных на моих старых публикациях на Хабре, задуманные как бонус тем, кто внимательно изучит мои труды :-) И наконец, два последних уровня были самыми сложными — к их темам я раньше не обращалась никогда. Мои поздравления тем, кто прошел квест сам или с подсказками — к сожалению, я не заложила никакого способа оценки количества таких людей. Всего скачиваний архива с квестом было более 20000.
+72
2 января 2012, 00:28
88

Brainfuck на ленте с ячейками неограниченной разрядности

Возьмем машину, у которой система команд точно такая же, как в языке brainfuck, но которая работает на ленте, в ячейки которой можно поместить любые целые числа. Переполнения в арифметических операциях не происходит, команда "+", примененная к положительному числу, всегда даст положительный результат, и т.п. Спрашивается: можно ли работать на такой машине, какие возникнут проблемы и как их обойти?

Преимущества очевидны: раз нет переполнений, то нет нужды и в длинной арифметике, можно одинаково работать с массивами любой длины и т.п. Но довольно быстро мы замечаем, что наш любимый способ очистки ячейки ("[-]") не работает: если в ячейке было отрицательное значение, то программа зацикливается. Аналогично, мы не можем свободно использовать команду копирования "[->+<]" — она тоже работает только для неотрицательных чисел.

Получается, что при программировании нам надо внимательно следить за знаками содержимого ячеек (проще всего — не допускать появления отрицательных чисел вообще), а если возникнет число, знак которого неизвестен — работать с ним специальным образом

Здесь мы рассмотрим две задачи: во-первых, запрограммируем оператор «if(a>b) C; else D;» где a и b неотрицательны, а C и D — какие-то действия, а во-вторых, научимся обнулять, копировать и определять знак произвольного числа.

+9
30 декабря 2011, 23:04
5

Новогодний квест

Пару дней назад я поддалась всеобщему новогоднему настроению и решила сделать новогодний квест. Собственно, вот он.

Принцип я подсмотрела в квестах Дмитрия Астапова aka _adept_: на каждом уровне дается задание (текст или картинка), решив его, получаем пароль к архиву, в котором лежит следующий уровень. Архив нулевого уровня (quest.zip) без пароля.

Задания получились разные — частично на ненормальное программирование, как я и планировала изначально, частично на догадливость. Поскольку из текстового файла, а тем более из картинки, при должном желании и изобретательности можно выжать очень много вариантов скрытого текста, правильный пароль на всех уровнях отмечен префиксом «pwd:» (вводить пароль нужно без префикса).

Надеюсь, вам понравится. С наступающим!

P.S. Наличие багов не исключено; пишите в личку, исправлю, обновлю.

Update. В паззл уровня 6 закралась ошибка; исправлена, архив quest.zip обновлен (размер архива должен быть 21501 байт). Если у кого-то закешировалась старая версия, скачать его же можно по ссылке tc-alchemy.progopedia.com/quest-patch1.zip
+85
30 декабря 2011, 00:33
133

Поздравление С Новым годом в стиле Brainfuck

Хочется поздравить читателей блога с Новым годом. Но не просто так, а написав поздравление на Brainfuck.

Первое поздравление выводит сообщение в виде ASCII-Art.

image

+22
26 декабря 2011, 15:06
12

Сортировка цифр на Brainfuck из песочницы

В этой статье я покажу вам, как отсортировать циферки с помощью Brainfuck.

Вы вводите цифры (каждая цифра не должна встречаться более 255 раз, при 8bit версии интерпретатора), после программа, если ее можно так назвать, выводит их по возрастанию.

Это будет реализация сортировки подсчётом, которая работает следующим образом:
1. Считывается число k.
2. В массиве A увеличиваем A[k] на единицу.
3. Повторяем шаги 1 и 2, пока не закончатся числа на входе.
4. Выводим A[i] раз число i, где i — это возможные значения чисел k.
+25
25 декабря 2011, 16:33
21
Aga