Russian Qt Forum
Апрель 20, 2024, 10:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Uniquer  (Прочитано 12569 раз)
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #15 : Июль 07, 2019, 13:30 »

Тогда стоит указать критерии "оптимальности", а то у каждого они могут оказаться свои. Среди них могут быть: минимум времени разработчика, затраченное на решение задачи, минимум символов в исходном коде решения, не использовать std, использовать такие конструкции С++, чтобы читатели кода мозг сломали и т.п. Улыбающийся.
Еще важнее узнать кто будет оценивать решения. Если сам Igors, то вряд ли найдется решение лучше. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Июль 07, 2019, 13:34 »

Тогда стоит указать критерии "оптимальности", а то ...
Ну вот, опять танцору что-то мешает Улыбающийся Есть разные подходы к одной задаче - вот и хотелось бы их увидеть, выбирайте те критерии что Вам по душе. "Вообще без std" бы конечно особо интересно, но разве такие смельчаки найдутся?
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #17 : Июль 07, 2019, 13:42 »

Ну вот, опять танцору что-то мешает Улыбающийся Есть разные подходы к одной задаче - вот и хотелось бы их увидеть, выбирайте те критерии что Вам по душе.

Перед критериями оптимальности у меня сначала стоит фильтр: стоит ли вообще заниматься решением какой-то задачи. Так вот на текущий момент данная задача по этому фильтру не проходит, так что извиняйте Улыбающийся.
Записан

Пока сам не сделаешь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Июль 07, 2019, 13:47 »

Перед критериями оптимальности у меня сначала стоит фильтр: стоит ли вообще заниматься решением какой-то задачи. Так вот на текущий момент данная задача по этому фильтру не проходит, так что извиняйте Улыбающийся.
Увы, привычка "задирать носик" очень быстро приобретается с изучением std Плачущий
Если Ваш хвильтр стоит "до того" - то чего тогда эфир засорять?
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #19 : Июль 07, 2019, 13:58 »

Если Ваш хвильтр стоит "до того" - то чего тогда эфир засорять?

Чтоб другие время зря не тратили. Оптимизирую Вашу задачу по времени разработчиков Улыбающийся.
Записан

Пока сам не сделаешь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #20 : Июль 07, 2019, 17:52 »

Ну задача прямо скажем сформирована фигово. В очередной раз. Да, перечитав сейчас я понимаю, что требуется. Но при первом прочтении (да и последующих) это действительно выглядело как "взять и заполнить ВСЕ дырки в контейнере".
Если 10 человек тебе говорят "пойди проспись" - пойди и проспись=) (с)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #21 : Июль 07, 2019, 18:14 »

Igors, на будущее, если ты хочешь, чтобы кто-то за тебя сделал работу, то хотя бы потрудись накидать приемочный тест. Задание сформулировано ужасно.
Вот пример, чтобы ты понял, что от тебя требуется:
Код
C++ (Qt)
int addIfBothPositive(int a, int b)
 
void test() {
   assert (addIfPositive(1, 2) == 3);
   assert (addIfPositive(1, -2) == 1);
   assert (addIfPositive(1, 0) == 1);
   assert (addIfPositive(-1, 5) == -1);
   assert (addIfPositive(-1, -5) == -1);
}
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Июль 08, 2019, 11:04 »

Но при первом прочтении (да и последующих) это действительно выглядело как "взять и заполнить ВСЕ дырки в контейнере".
Да неужели?
Нужна ф-ция которая бы "заполняла дырки" и возвращала заполненное значение не меньше фиксированного заданного min. Напр если min=50 то для контейнера выше ф-ция должна последовательно выдавать
Цитировать
50, 90, 120..9990, 1010..1090. 1110...
Др словами ф-ция вставляет в контейнер наименьшее уникальное значение кратное 10 и >= min
Как видим, речь идет о заполнении строго "по одному", а вовсе не "залить весь массив" - в последнем никакого смысла нет. Меньше надо сборками заниматься Улыбающийся

Igors, на будущее, если ты хочешь, чтобы кто-то за тебя сделал работу,
Почему Вы полагаете что каждый создающий тему - школота и жадный лох, которому нужно только получить текст под copy/paste? Не надо так плохо думать о людях. Да и как-то неудобно называть этот десяток строк "работой".

Задачу я давно решил, и свое решение привел выше. Вот хочу обсудить его с коллегами - может есть др возможности, использование модных новых приемов и все такое. Как говорится "на будущее". Никак не пойму что тут плохого, и почему так взвивается  тыкалка  Улыбающийся

то хотя бы потрудись накидать приемочный тест. Задание сформулировано ужасно.
Вот пример, чтобы ты понял, что от тебя требуется:
Код
C++ (Qt)
int addIfBothPositive(int a, int b)
 
void test() {
   assert (addIfPositive(1, 2) == 3);
   assert (addIfPositive(1, -2) == 1);
   assert (addIfPositive(1, 0) == 1);
   assert (addIfPositive(-1, 5) == -1);
   assert (addIfPositive(-1, -5) == -1);
}
 
Это что-то типа "TDD"? Ну и что проверяет этот тест, и какая от него польза? По-моему аж никакой  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #23 : Июль 08, 2019, 11:17 »

Нет, это не TDD.
Польза от него большая, если человек не может сформулировать ТЗ достаточно ясно. Напиши приемочный тест на свою задачу и укажи время выполнения твоего решения, может тогда и будет кому-то интересно покопаться. А так, смысла в твоем топике никакого, только интернет засоряет.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #24 : Июль 08, 2019, 11:23 »

Нужна ф-ция которая бы "заполняла дырки" и возвращала заполненное значение не меньше фиксированного заданного min. Напр если min=50 то для контейнера выше ф-ция должна последовательно выдавать
Цитировать
50, 90, 120..9990, 1010..1090. 1110...
Др словами ф-ция вставляет в контейнер наименьшее уникальное значение кратное 10 и >= min
Как видим, речь идет о заполнении строго "по одному", а вовсе не "залить весь массив" - в последнем никакого смысла нет. Меньше надо сборками заниматься Улыбающийся

Так функция должна последовательно выдавать значения (куда? по одному или скопом? в  результате одного вызова или нескольких?) и/или вставлять значения в контейнер (какой?)?

Это что-то типа "TDD"? Ну и что проверяет этот тест, и какая от него польза? По-моему аж никакой  Улыбающийся

Польза такая, что снимает озвученные выше вопросы.
Записан

Пока сам не сделаешь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Июль 09, 2019, 06:08 »

Так функция должна последовательно выдавать значения (куда? по одному или скопом? в  результате одного вызова или нескольких?)
Общее правило: если что-то не оговорено, то на усмотрение исполнителя. Применим. Почему я не могу запросить не один, а сразу пачку уникальных ID  (они же "заполненные дырки") напр вернув контейнер? Пожалуйста, этого никто не запрещал. Но и не требовал, можно возвращать и единственное значение. Но в любом случае значение(я) должно возвращаться для его использования, иначе смысла нет.
и/или вставлять значения в контейнер (какой?)?
Требуется уникальность, значит, в общем случае, созданное значение должно быть сохранено, так или иначе надо знать какие значения уже имеются. Для их хранения в стартовом посте предлагается контейнер, ни о каком другом речь не шла.

если человек не может сформулировать ТЗ достаточно ясно.
Ход мысли примерно такой "Я не понял - значит сформулировано плохо!". Пример
Цитировать
Руки свисают ниже колен - значит это длинные руки!
Необязательно, это могут быть короткие ноги. Т.е. сформулировано-то нормально, проблемы с "понималкой". Стоило немного подумать - и все бы стало ясно. Не захотели - ну это Ваше дело.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #26 : Июль 09, 2019, 07:39 »

>Ход мысли примерно такой "Я не понял - значит сформулировано плохо!"
Как ты можешь видеть выше, не понял задание не только я. Тебе разве не кажется, что пролема не в моей понималке, а в твоем корявом ТЗ?
Если уж ты притащил что-то сюда, то будь добр, прояви уважение к коллегам и сделай все правильно.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Июль 09, 2019, 12:41 »

Тебе разве не кажется, что пролема не в моей понималке, а в твоем корявом ТЗ?
Нет, мне совсем так не кажется Улыбающийся Ладно, кто там чего не понял - это неинтересно, вернемся к теме.

В чем недостаток предложенного решения (пока, увы, одного). Бросается в глаза что хранение организовано туповато, напр { 10, 20, 30, 40, 50.. } Напрашивается хранить не int'ы, а пары (диапазоны) непрерывно возрастающих значений, напр { 10, 50 }. Насколько помню, так Qt хранит selection. Худший случай: непрерывных данных нет, ну расход памяти вдвое больше, переживу. Но т.к. они добавляются подряд, то экономия памяти будет значительна (а заодно и скорость lower_bound). Написать это самому конечно можно, но такое решение следует признать "нетехничным", контейнер диапазонов - задача 100% стандартная и общая, стало быть надо искать готовое решение.

Итак, где же нам хапнуть такой готовый класс?  По этой части я не силен. Ну в дусте наверняка есть - но пока там раскопаешь - проще застрелиться Плачущий В std - не знаю, когда-то видел std::ranges но оно вроде только С++ 20, да и то ли это - хз

В общем, прошу блеснуть эрудицией и широтой познаний  Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.201 секунд. Запросов: 23.