Мне тоже очень нравится пример из DRKB, который Sheka привел, очень элегантно. Уже который раз его вижу, и всякий раз восторгаюсь )). Я обычно не вспоминаю его в нужный момент и делаю, как в примере volvo. Но вот сейчас вставил счетчик внутрь repeat, и вышло, что полное количество повторений колеблется примерно от одной тысячи до двух (при диапазоне 256). Конечно, это не значит, что метод DRKB в 6 раз эффективнее (1500/250), ибо в нем используются сдвиги, которые, конечно, значительно медленнее, чем операции с множествами, но все равно здорово )). Особенно, если учесть, что вся процедура производится в начале, а потом лишь чтение значений. Тут тоже есть капля дегтя: памяти идет больше (на данные - в 8 раз)..
Оба метода применимы только для чисел, не превосходящих 255 (и DRKB начинается с 1). Для расширения метода DRKB на больший диапазон нужно реализовать вставление элементов в массив (что несложно), а второй метод потребует практически полной реализации множеств (что, на мой взгляд, сложнее). И еще - на большем диапазоне эффективность второго метода еще упадет (количество повторений увеличится непропорционально). Интересно было бы сравнить, однако..
