А я вот тут намедни придумал способ количественного измерения вежливости. Правда, пока что только дискретно, так что назовём это порядком вежливости PV : человеки -> натуральный ряд (начиная с нуля)
Итак, пусть мы хотим измерить PV(Вася). Познакомим Васю с неким, допустим, Петей, который скажет Васе, что никогда не обижается, а потом в один прекрасный момент... ну, например, сделает как-нибудь так, чтобы Вася за него запнулся. Если PV(Вася) > 0, Вася извинится за то, что запнулся. А если больше 1, то извинится за то, что забыл, что Петя не обижается. Ну и так далее, так что PV(Вася) будет равняться глубине рекурсии.
Возникает естественный вопрос: а можно ли это дело как-то на всю вещественную ось продолжить, по типу факториала и гамма-функции? Наверное, можно что-нибудь изощрённое придумать. Скажем, если бы были средства для удаления памяти Васи за последние N дней, эксперимент можно было бы повторить дофига раз и взять среднее. Или взвешенное среднее. Или ещё что-нибудь, неважно... %-)
Showing posts with label бред. Show all posts
Showing posts with label бред. Show all posts
Tuesday, April 17, 2012
Friday, December 9, 2011
Инфиксная запись функций (С++)
В общем-то, последующее — полный изврат и к применению не рекомендуется :)
#include <functional>
template <typename Func> struct infix_operator;
template <typename Func> infix_operator<Func>& operator|(int, infix_operator<Func>&);
template <typename Func> int operator|(const infix_operator<Func>&, int );
template <typename Func>
struct infix_operator {
typedef infix_operator<Func> infix_t;
int left;
static Func func;
friend infix_t& operator|<>(int, infix_t&);
friend int operator|<>(const infix_t&, int);
};
template <typename Func> Func infix_operator<Func>::func;
template <typename Func>
infix_operator<Func>& operator|(int left, infix_operator<Func>& op) {
op.left = left; return op;
}
template <typename Func>
int operator|(const infix_operator<Func>& op, int right) {
return infix_operator<Func>::func(op.left, right);
}
static struct : infix_operator<std::plus<int>> {} PLUS;
static struct : infix_operator<std::multiplies<int>> {} TIMES;
static struct : infix_operator<std::divides<int>> {} DIV;
static struct : infix_operator<std::modulus<int>> {} MOD;
#include <iostream>
int main() {
std::cout << (((2 |PLUS| 3) |TIMES| (36 |DIV| 6)) |MOD| 17) << std::endl;
}
Thursday, January 20, 2011
Tuesday, November 23, 2010
Нумерология
Недавно заметил одну забавную штуку.
(Пояснение для нематмеховцев)
Единственный некоммерческий автобус, на котором можно доехать от студгородка до метро без пересадок — 210-й. Ходит он, между прочим, от Кировского завода (тут ещё такое совпадение, что я родом из Кирова, но это не особо удивляет, ибо от коммуняг чёртова уйма одинаковых названий осталась).
Так вот, типичный путь от зданий универа на Ваське до этого самого Кировского завода таков: 1 станция по 3-й линии, потом 2 станции по 2-й линии и 3 станции по 1-й линии. Адовая симметрия. А потом в идеале оттуда на 210-м до общаги (тоже: 2-1-0), но это редко получается, чаще приходится на 200-м и 359-м ездить =(
(Пояснение для нематмеховцев)
Единственный некоммерческий автобус, на котором можно доехать от студгородка до метро без пересадок — 210-й. Ходит он, между прочим, от Кировского завода (тут ещё такое совпадение, что я родом из Кирова, но это не особо удивляет, ибо от коммуняг чёртова уйма одинаковых названий осталась).
Так вот, типичный путь от зданий универа на Ваське до этого самого Кировского завода таков: 1 станция по 3-й линии, потом 2 станции по 2-й линии и 3 станции по 1-й линии. Адовая симметрия. А потом в идеале оттуда на 210-м до общаги (тоже: 2-1-0), но это редко получается, чаще приходится на 200-м и 359-м ездить =(
Friday, September 24, 2010
О достаточности буквы ы и <Shift>
Вот некоторые говорят, что общение посредством одной буквы "ы" невозможно. Может, оно и так. Но если добавить хоть ещё один символ (скажем, "Ы") в алфавит, то вполне достаточно: действительно, отобразим {(a₁, a₂, ..., a₈) | a_i ∊ {'ы', 'Ы'} } в, скажем, набор cp1251 (однобайтная кодировка) таким образом: i-й бит нашего байта равен 0, если a_i = 'ы', и 1 в противном случае. Очевидно, что такое отображение биективно. (Если кому-то так же, как мне, не хватает cp1251, используйте просто отображение {'ы','Ы'} → {0,1} и UTF-8. Идея тут ясна.)
...теперь про изображения. Конечно, можно и тупо все байты в кучу 'ы' и 'Ы' перегнать, но это же так скучно, правда?..
Так что предлагаю рассмотреть следующий язык для рисования чёрно-белых изображений. Представим себе черепашку (как в Лого Мирах, лол), которая начинает из верхнего левого угла картинки идти вниз (для определённости) с поднятым пером. Введём следующие команды:
ы - поворот против часовой стрелки на 90°
Ы - прохождение на один пиксел в текущем направлении.
Теперь смотрите. Если мы натыкаемся на "ыыыы" в исходной строке (естественно, окружённую не 'ы'), будем считать это командой "инвертировать состояние пера": действительно, поворот на 360° — совершенно бессмысленное занятие, так что лучше бы эта подпоследовательность что-нибудь значила.
Аналогично, бессмысленную команду "ыыыыыыыы" задействуем в качестве команды окончания рисунка.
Т.е.: если менее 4 'ы' подряд — всё ОК, 4 'ы' - инвертирование пера, от 4 до 7 'ы' включительно - инвертирование пера + поворот (заметим, что поскольку поворот не меняет состояние рисунка, эти два действия можно выполнять в любой последовательности, так что двусмысленность отсутствует), 8 'ы' и более - завершаем выполнение программы.
*фух, выдохнул*
...теперь про изображения. Конечно, можно и тупо все байты в кучу 'ы' и 'Ы' перегнать, но это же так скучно, правда?..
Так что предлагаю рассмотреть следующий язык для рисования чёрно-белых изображений. Представим себе черепашку (как в Лого Мирах, лол), которая начинает из верхнего левого угла картинки идти вниз (для определённости) с поднятым пером. Введём следующие команды:
ы - поворот против часовой стрелки на 90°
Ы - прохождение на один пиксел в текущем направлении.
Теперь смотрите. Если мы натыкаемся на "ыыыы" в исходной строке (естественно, окружённую не 'ы'), будем считать это командой "инвертировать состояние пера": действительно, поворот на 360° — совершенно бессмысленное занятие, так что лучше бы эта подпоследовательность что-нибудь значила.
Аналогично, бессмысленную команду "ыыыыыыыы" задействуем в качестве команды окончания рисунка.
Т.е.: если менее 4 'ы' подряд — всё ОК, 4 'ы' - инвертирование пера, от 4 до 7 'ы' включительно - инвертирование пера + поворот (заметим, что поскольку поворот не меняет состояние рисунка, эти два действия можно выполнять в любой последовательности, так что двусмысленность отсутствует), 8 'ы' и более - завершаем выполнение программы.
*фух, выдохнул*
Tuesday, June 22, 2010
Автобусы и правила Кирхгофа.
Вы никогда не задумывались, что интервалы хождения автобусов (обозначим их T) сродни сопротивлению? Можно даже проводимости складывать, как при параллельном соединении (если несколько автобусов подходят) и получить среднее время ожидания.
Subscribe to:
Posts (Atom)
