Size: a a a

2021 March 03

d

d7d1cd in supapro.cxx
Прошу прощения за оффтоп, наверное. Но не могу решить такую задачу (на плюсах, конечно). Задано число от 1 до 31 (это день в месяце).

Необходимо определить другое число, которое будет равно 1, если первое лежит в диапазоне от 1 до 5 включительно (1-5: 1). И так далее 6-10: 5, 11-15: 10, 16-20: 15, 21-25: 20, 26-31: 25.

Можно, конечно, решить if-ами, но это как-то много кода. Может есть простое решение?
источник

CD

Constantine Drozdov in supapro.cxx
d7d1cd
Прошу прощения за оффтоп, наверное. Но не могу решить такую задачу (на плюсах, конечно). Задано число от 1 до 31 (это день в месяце).

Необходимо определить другое число, которое будет равно 1, если первое лежит в диапазоне от 1 до 5 включительно (1-5: 1). И так далее 6-10: 5, 11-15: 10, 16-20: 15, 21-25: 20, 26-31: 25.

Можно, конечно, решить if-ами, но это как-то много кода. Может есть простое решение?
int map[32] = { 
 0, //нулябрь
 1, 1, 1, 1, 1,
 5, 5, 5, 5, 5,
 10, 10, 10, 10, 10,
 15, 15, 15, 15, 15,
 20, 20, 20, 20, 20,
 25, 25, 25, 25, 25,
 25
};

не предлагать?
источник

МВ

Макс Воробьев... in supapro.cxx
d7d1cd
Прошу прощения за оффтоп, наверное. Но не могу решить такую задачу (на плюсах, конечно). Задано число от 1 до 31 (это день в месяце).

Необходимо определить другое число, которое будет равно 1, если первое лежит в диапазоне от 1 до 5 включительно (1-5: 1). И так далее 6-10: 5, 11-15: 10, 16-20: 15, 21-25: 20, 26-31: 25.

Можно, конечно, решить if-ами, но это как-то много кода. Может есть простое решение?
через деление на 5?
источник

d

d7d1cd in supapro.cxx
Constantine Drozdov
int map[32] = { 
 0, //нулябрь
 1, 1, 1, 1, 1,
 5, 5, 5, 5, 5,
 10, 10, 10, 10, 10,
 15, 15, 15, 15, 15,
 20, 20, 20, 20, 20,
 25, 25, 25, 25, 25,
 25
};

не предлагать?
Это как с ифами - много кода ))
источник

CD

Constantine Drozdov in supapro.cxx
d7d1cd
Это как с ифами - много кода ))
не знаю про ифы, но тут мысль прослеживается и модифицируется легко
источник

AS

Anatoly Shirokov in supapro.cxx
d7d1cd
Это как с ифами - много кода ))
O(1) - это лучшее, что может быть, и нет cache miss, а ты нос воротишь.
источник

CD

Constantine Drozdov in supapro.cxx
Anatoly Shirokov
O(1) - это лучшее, что может быть, и нет cache miss, а ты нос воротишь.
ну если бы я тебе тестовое писал, я бы интерполяционный многочлен по модулю 37 бы посчитал :)))
источник

CD

Constantine Drozdov in supapro.cxx
всегда было интересно, как на такое отреагируют
источник

d

d7d1cd in supapro.cxx
Макс Воробьев
через деление на 5?
Пробовал. Еще больше кода, чем с ифами. Может не так пробовал, конечно...
источник

d

d7d1cd in supapro.cxx
Возьму-ка решение @webreh. Да и @anatolijs намекает )
источник

Н

Николай in supapro.cxx
d7d1cd
Пробовал. Еще больше кода, чем с ифами. Может не так пробовал, конечно...
если <= 5 вывод 1, иначе целочисленное деление на 5
источник

D

Dmitriy in supapro.cxx
Как лучше взаимодействовать с Сишным апи, возвращающим void* + код int, в зависимости от которого следует интерпретировать буфер с данными?
Участок кода очень нагруженный - и ничего лучше switch в голову не пришло. Однако пара десятков меток выглядит так себе
источник

SH

Serhii Herashchenko in supapro.cxx
Dmitriy
Как лучше взаимодействовать с Сишным апи, возвращающим void* + код int, в зависимости от которого следует интерпретировать буфер с данными?
Участок кода очень нагруженный - и ничего лучше switch в голову не пришло. Однако пара десятков меток выглядит так себе
А как происходит интерпретация буффера?
источник

SK

Stas Koynov in supapro.cxx
Dmitriy
Как лучше взаимодействовать с Сишным апи, возвращающим void* + код int, в зависимости от которого следует интерпретировать буфер с данными?
Участок кода очень нагруженный - и ничего лучше switch в голову не пришло. Однако пара десятков меток выглядит так себе
ну метки последовательные? от 0 до n? тогда свитч должен оптимизироваться компилятором в табличный метод, а это хорошо!
источник

D

Dmitriy in supapro.cxx
Stas Koynov
ну метки последовательные? от 0 до n? тогда свитч должен оптимизироваться компилятором в табличный метод, а это хорошо!
Да
источник

D

Dmitriy in supapro.cxx
Serhii Herashchenko
А как происходит интерпретация буффера?
Каст в абсолютно разные типы и дальнейшая обработка
источник

SK

Stas Koynov in supapro.cxx
ну тогда смотри асм. если таблица то все ништяк
источник

SK

Stas Koynov in supapro.cxx
если тебя напрягает размер свитч-кейза. ну ты можешь сделать таблицу сам! так как последовательно без дыр, просто массив иначе на выбор хэшь таблица, КЧ дерево. и мелкий код попали в таблицу не попали
источник

d

d7d1cd in supapro.cxx
Николай
если <= 5 вывод 1, иначе целочисленное деление на 5
А еще обработка если дата равна 31. Вот такой код накидал:
int foo(int i) {
 if (i < 6) return 1;
 if (i > 30) return 25;
 return (i - 1) - (i - 1) % 5;
}
источник

SH

Serhii Herashchenko in supapro.cxx
d7d1cd
А еще обработка если дата равна 31. Вот такой код накидал:
int foo(int i) {
 if (i < 6) return 1;
 if (i > 30) return 25;
 return (i - 1) - (i - 1) % 5;
}
Тогда уже если i > 25
источник