avva: (Default)
[personal profile] avva
(эта запись может быть интересна лишь программистам и сочувствующим)

Как и в прошлой загадке, нужно сказать, что делает функция на C. На мой взгляд, она заметно сложнее предыдущей.

Эта функция выполняет некую полезную работу, которую нередко приходится выполнять в настоящих программах или библиотеках. Если вы разобрались в том, что фунцкия делает "буквально", но не понимаете, зачем это нужно, то это не полный ответ на вопрос (хотя тоже можете написать, конечно). Желательно ответить на вопрос, не запуская код; если вы запустили все же, укажите это в своем ответе, пожалуйста.

Комментарии скрываются. Автор этой загадки - мой коллега Дэвид Тернер (David Turner), которого я уже упоминал в записи про предыдущую загадку.

int func(unsigned char c)
{
  const uint64_t MULT= 270549121;
  uint64_t magic = (c >> 2) * MULT + 272696336;
  magic = (((magic >> 6) & MULT)*MULT) >> 28;
  return 1 + (magic & 7);
}


Update (6 часов спустя): только что пришел первый полный ответ, от [livejournal.com profile] type_o_graph. Есть также несколько ответов, которые правильно описывают, что функция делает "буквально", но не объясняют или неправильно объясняют, зачем это нужно.

Update: вот правильный ответ. Раскрываю все комментарии к этой записи. Спасибо всем за попытки и ответы!

Date: 2011-03-07 02:43 pm (UTC)
From: [identity profile] oblomov-jerusal.livejournal.com
В ответе выше предполагается, что бит 8 байта равен 0. Если бит 8 равен 1, посчитается 6 минус длина последовательности. Если я неясно выразился, в обеих случаях последовательность должна начинаться с бита 7.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 05:51 am
Powered by Dreamwidth Studios