[C++] Задачка в стиле "на собеседование"
производительность не имеет значения
unsigned round_up_to_multiple_of_4(unsigned x) {
return *std::find_if(
boost::counting_iterator<unsigned>(0
boost::counting_iterator<unsigned>(UINT_MAX
[=](unsigned y) { return x <= y && y % 4 == 0; });
}
(x + 3) & 0xFFFFFFFC ?
unsigned round_up_to_multiple_of_4(unsigned x) {
return *std::find_if(
boost::counting_iterator<unsigned>(0
boost::counting_iterator<unsigned>(UINT_MAX
[=](unsigned y) { return x <= y && y % 4 == 0; });
}
код должен быть как можно короче
хотя (a + 3) / 4 * 4 — это вообще "в лоб" без выебонов и короче даже


(x + 3) & 0xFFFFFFFCвообще да, но тогда уж не 0xFFFFFFFC, а ~3 - намного короче. а так да, это пока фаворит. причём оказывается, что даже скобки можно убрать. но это неочевидно.
о да, с ~3 идеально (оставим в стороне читабельность)
сложение имеет больший приоритет
вот это неочевидно
(x + 3) & 0xFFFFFFFC ?
шаблоны не используются, тебе ядро хакать, а не на C++ писать
шаблоны не используются, тебе ядро хакать, а не на C++ писатьэто вообще общая проблема российского образования. Понабирают всяких по олимпиадам, а те шаблонов писать не умеют

о да, с ~3 идеально (оставим в стороне читабельность)ну как бы не зависит от sizeof(unsigned)
но 0xFFFFFFFC лучше, если __u32, а не unsigned
unsigned round_up_to_multiple_of_4(unsigned x)
{
unsigned y;
y = x;
while (y%4 != 0) { y++; }
return y;
}
Выдаёт:
-10 -> -8
-9 -> -8
-8 -> -8
-7 -> -4
-6 -> -4
-5 -> -4
-4 -> -4
-3 -> 0
-2 -> 0
-1 -> 0
0 -> 0
1 -> 4
2 -> 4
3 -> 4
4 -> 4
5 -> 8
6 -> 8
7 -> 8
8 -> 8
9 -> 12
так это круто, даже для отрицательных работает
сложение имеет больший приоритетДавно?
вот это неочевидно
Давно?Пробовал в VS2010.
она говорит "неочевидно"?

Судя по тому, что "пробовал", а не "слушал", не говорит, а оставляет ощущение.
у вас в разделе так интересно!
Это только кажется!
Это очень неудачная задачка "на собеседование", как по мне.
Неудачная мб окей, но почему очень?

Еврейский ответ: какие знания или навыки она проверяет? Плюс метрика решения (длина кода).
навык реализовать простое в общем-то математическое действие так, чтобы минимизировать wtf/min
Для минимизации WPM достаточно либо писать не ~3, а / 4 * 4, либо добавить комментарий. Оба варианта противоречат требованию минимальности кода. Впрочем, если речь идёт о наборе быдлокодеров для сайтов, то тогда ок задачка.
если не заострять внимания на короткости, а просто попросить: "как бы вы написали в коде?".это ты пропустил, видимо.
Оставить комментарий
Serpent555
Как бы вы написали тело функциикоторая округляет вверх целое число до наименьшего целого кратного четырём?
Чтобы было понятнее:
Считаем, что производительность не имеет значения, код должен быть как можно короче.