Люди никогда не достигнут совершенства, пока будут оставаться людьми...
Сообщество медленно и верно обрастает спамом студентов-двоечников, поэтому предлагаю немного развить это злобное настроение.
Давайте в комментариях писать Загадки, Головоломки и прочие интересные факты из жизни программирования.
Вашему вниманию представляю просто замечательный код на языке С/С++
что же он делает?
ответ
Давайте в комментариях писать Загадки, Головоломки и прочие интересные факты из жизни программирования.
Вашему вниманию представляю просто замечательный код на языке С/С++
int d = (m != 2 ? 30 + (m % 2)^(m > 7) : 28 + !(y % 400) || !(y % 4) && (y % 25));
что же он делает?
ответ
Я думаю так:
(ну логично что m и y были где-то объявлены и проинициализированы)
создаем переменную d и в зависимости от значения m выполняем действия.
Если m!=2 (то есть не равно двум), тогда берет число тридцать и добавляет к нему значение:
1) остаток от деления m на 2
2) это логическая операция, то есть если m>7 тогда (m>7) будет единицей, если же меньше, то нулём
3) то, что получено в пунктах 1) и 2) совмещается в битовой операции "исключающее или"
то есть по схеме 1+0=1, 0+1=1, 1+1=0, 0+0=0
если же m==2? тогда выполняется блок после запятой:
по частям сейчас как-нибудь:
!(y % 4) && (y % 25)) с вот этого начну:
(y % 4) и (y % 25) - остатки от деления на соответствующие числа.
!(y % 4) - это битовая операция отрицания, она меняет все единицы на нули и наоборот.
то есть получаем два числа.
их проверяем вот так: !(y % 4) && (y % 25))
то есть логической операцией "и".
Она выдаст единицу, если и первый операнд не нуль и второй операнд не нуль, то есть когда число делиться на 4 и не делится на 25 одновременно.
то же самое и с !(y % 400) - оно выдаст единицу, если число делится на 400 и 0 в противном случае.
Тогда соединив всё это битовым или:
!(y % 400) || !(y % 4) && (y % 25))
получим единицу, если число делиться на 400 или делится на 4, но не делиться на 25.
В отсальных случая получим нуль.
Тогда в итоге полученное значение (1 или 0) прибавляем к 28.
Вот как-то так.
Вроде нигде не ошибся.
Откуда код?)
число дней месяца m в году y
капец! о0
он считает сколько дней в месяце?!!!!
ОФИГЕТЬ!!!
Где достал?
Супер!
int y = (n & 0xAAAAAAAA) >> 1 + (n & 0x55555555);
y = (y & 0xCCCCCCCC) >> 2 + (n & 0x33333333);
y = (y & 0xF0F0F0F0) >> 4 + (n & 0x0F0F0F0F);
y = (y & 0xFF00FF00) >> 8 + (n & 0x00FF00FF);
y = (y & 0xFFFF0000) >> 16 + (n & 0x0000FFFF);
читать дальше
(d+26*m/10+y+y/4-y/100+y/400+ADJ)%7
читать дальше