Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Category:

еще одна загадка для программистов

(эта запись может быть интересна лишь программистам и сочувствующим)

Как и в прошлой загадке, нужно сказать, что делает функция на 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 часов спустя): только что пришел первый полный ответ, от type_o_graph. Есть также несколько ответов, которые правильно описывают, что функция делает "буквально", но не объясняют или неправильно объясняют, зачем это нужно.

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

Recent Posts from This Journal

  • об опасности слева

    (когда-то пытался ввести правило писать про политику только по пятницам. Вернуться к нему, что ли?..) В прошлой записи "статья Гениса" я написал,…

  • без комментариев

  • решение про шнурки

    Задача про шнурки понравилась мне в первую очередь тем, насколько неинтуитивным показался правильный ответ. Из комментариев быстро стало ясно, что…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 57 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →

Recent Posts from This Journal

  • об опасности слева

    (когда-то пытался ввести правило писать про политику только по пятницам. Вернуться к нему, что ли?..) В прошлой записи "статья Гениса" я написал,…

  • без комментариев

  • решение про шнурки

    Задача про шнурки понравилась мне в первую очередь тем, насколько неинтуитивным показался правильный ответ. Из комментариев быстро стало ясно, что…