Category: эзотерика

Category was added automatically. Read all entries about "эзотерика".

nyaload

6174 Капрекара

число 6174, есть в нём что-то мистическое и тайное.
Возмите любое четырехзначное число с неодинаковыми цифрами, переставьте цифры так что бы получилось наименьшее и наибольшие числа, и вычтите. Не более чем через 7 шагов последовательность сойдётся к 6174, и никто не знает почему.

Например: 1234 -> 8352 -> 6174 -> ....

Информация: http://en.wikipedia.org/wiki/Kaprekar_constant

Python:
i = 1234
for _ in range(10):
   x = ''.join(sorted('%04i' % i))
   i = int(x[::-1]) - int(x)
   print i

upd: подробное описание: http://plus.maths.org/content/os/issue38/features/nishiyama/index
nyaload

(no subject)

Тот кто поместил латинскую C(Це) и русcкую С(Эс) на одну клавишу сильно не прав.
У меня образовалась привычка перед вводом буквы C напечать "asdf" или "фыва", что бы быть уверенным в том что я сейчас напечатаю. Когда вижу мистические проблемы с путём где есть C (а это например все C:\*), то кроме проблем с пробелами в начале и конце строки проверяю, а не русская ли это С.
nyaload

bithacks

Выяснилось, что битовые операции для быстрого нахождения логарифмов и тп часто считаются мистикой, люди их боятся, старшие программисты заменяют на "простые понятные циклы, вдруг рванёт из потустороннего мира".
Ничего мистического тут нет, надо просто думать о числе как о контейнере битов, и помнить школьные правила сложения/вычитания в столбик. Битовые &|~ >> << дают очевидные операции над контейнером. Сложение и вычитание – дают предсказуемые операции, когда нет переноса в старший разряд. Или когда из круглого числа с хвостом нулей вычитают 1, то получаем такой же хвост из 12 (в десятичной системе – из девяток). Например, xyz5000 - 1 == xyz4999.

Вкратце (и нестрого) про представление отрицательных чисел. В байте могут храниться значения от -128 до 127. Collapse )(Без)знаковость в арифметических операциях на биты не влияет, если нам удобно думать что числа от -1 до 254 или от -100 до 155, то пожалуйста, только сравнение будет своё, а +-* можно оставить.

Неочевидных арифметических трюков мало, самые часто использующиеся - это равенство (~x + 1) == (0 - x) и определение знака числа через x >> 31 (>>63 для 64-битных, >>7 для signed byte и тп).
  1. Первое равенство (~x + 1) == (0 - x) получается вычитанием в столбик. Вычтем из байта 11111111 число xxxxxxxx, 1-x даёт инверсию бита x. Вычитание из 11111111 это вычитание из представления -1. Таким образом -1-x == ~x.

  2. Второе равенство следует из определения побитового сдвига для знаковых чисел. Когда биты сдвигаются вправо, надо чем-то заполнять место слева. Для безнаковых чисел туда кладуться просто нули, а для знаковых – старший бит, что бы сохранился знак числа. Таким образом, число (Yxxxxxxx >> 7) превратится в YYYYYYYY, то есть в 0 или в -1. Также, если у нас есть выражение mask, которое равно -1 или 0, то mask xor x равно либо x, либо ~x.

  3. Так же постоянно используется прием (трюком это сложно назвать, слишком просто) замены (a ? x : y) на (a_mask & x) | (~a_mask & y), где a_mask это 00000000 или 11111111.

Давайте разберём несколько примеров.
1) Абсолютное значение числа.Collapse )
2) является ли число степенью двойки. Очень красивое решение: Collapse )
3) округление до следующей степени двойки. Collapse )
4) Подсчёт числа битов. Collapse )
5) логарифм числа (т.е. позиция старшего бита, номер мип-мапа, глубина двоичного дерева, количество шагов в делении пополам и тд).Collapse )
Уф, я устал, больше хаков смотрите здесь:
http://graphics.stanford.edu/~seander/bithacks.html
Если будете копировать код, подумайте, считать ли 0 степенью двойки или есть ли у 0 осмысленный логарифм.
nyaload

Эзотерические фокусы

Раз уж оказалось битое стекло, сгрёб его в кучу, проверил что можно по стеклу ходить.
Фокус в том, что надо по ощущениям кожи выбирать положение стоп так, что бы точки соприкосновения приходились не на края стёкол. Сначала для уверенности и тренировки можно проделывать это неполным весом на одной ноге или рукой.
Видео: http://dobrokot.ru/dump/razobls.avi ( есть ещё на ютубе, но почему-то оно зависало при проигрывании ).

Так же там в видео рассказывается про другие фокусы, например про чтение сквозь плотную повязку.

Ещё выяснял про хождение по углям. Теплоёмкость крови (те. воды) - высокая, теплоёмкость углей - низкая. Так же угли сразу крошаться в слой золы-изолятор. Постоянно циркулирущая по каппилярам кровь является потрясающей охлаждающей системой, которая отводит тепло от поверхности кожи.

Сам пока не пробовал =)

Но пробовал другой фокус, из Перельмана, тоже поражающий неподготовленную публику - поставить кипящий чайник на руку. Где-то секунд пять можно держать без проблем. Перепроверил, во избежание травм у читающих мой ЖЖ. Не делайте так с чайником. Или делайте это с крайней осторожностью. Больше секунды удержать было невозможно, впрочем ожогов нету. То что я запомнил сделанное раньше - возможно это был уже был остывший чайник, с горячей водой годной для чая, но не кипящий. Или может там было более ровное/чистое дно.
Тем не менее, скан задачи из книги Перельмана "Знаете ли вы физику?"

Collapse )
nyaload

WTF-8

Вообще я считаю что UTF-8 - это гениальное изобретение для обеспечения совместимости старых и новых программ, которое позволяет плавно переходить на юникод. Как клёво и тонко продумана сборка букв в байты, что бы работали старые программы!

Хотите что бы правильная™ технология заменила кривую, которую вы ненавидите, но которой пользуется весь мир - изобретайте такие же гениальные схемы перехода.

Обнаружил ситуацию, где незадумчивый UTF-8 ломает старый однобайтовый код: регулярные выражения вроде [а-яА-ЯёЁ] превращаются в чёрти что, через раз работающее.

Видел ещё одно место, где UTF-8 порождает баги: показать пользователю первые N символов. При этом один из русских символов разрезается ровно пополам.
В браузере выглядит так:

Это начало некого длинного текс[?]

где вместо [?] - квадратик или вопросик или т.п.

Ещё грабли, поинтересней. В cp1251 есть один неопределённый код символа, 0x98. Это соответствует второму байту буквы 'И' в UTF-8 ('\xd0\x98'). Иногда при интерпретации UTF-8 через промежуточный cp1251 происходит мистика - 'И' исчезает, заменяется на '?' и тп.

Кто ещё с чем таким сталкивался, на границе UTF-8 и однобайтовых программ?