[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
Как бы вы написали тело функциикоторая округляет вверх целое число до наименьшего целого кратного четырём?
Чтобы было понятнее:
Считаем, что производительность не имеет значения, код должен быть как можно короче.