Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Между чтением теории и стандарта Си, я решил размяться и решить простую задачу. Её решил, но при решении вновь появились вопросы. Подскажите пожалуйста Задача: Определить симметричен ли диапазон байт. Ввод строки организовать через консоль. Примеры: helloolleh true hellosmthelse false Моё решение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 1. Есть ли смысл добавлять эту проверку ? Как вы считаете ? Мне кажется, что если бы эта программа принимала поток данных(на подобие 1 команда, много данных), то смысл был бы. Либо сейчас такой оптимизацией никто не занимается, и процессор сам додумает за меня про чётность и нечётность ? 2.Мне нравится одна моя строчка, она крайне симпатичная, Код: plaintext 1. но я не уверен, что проверка на равенство через сумму по модулю два будет оптимальней чем обычное ==, с одной стороны, как вероятно работает ==, идёт по битам и проверяет до первого различия (8 битовых сравнений максимум, минимум 1), а сумма по модулю два, 8 битовых операций, да плюс от 1 до 8 битовых сравнений. Как лучше сравнивать ? Или мне нужно дизассемблировать, и исходя из этого смотреть ? 3.Мне не нравится как я работаю с памятью. Можно ли в Си динамически расширять массив, и можно ли это сделать в данном конкретном случае? Именно в С, не в С ++. 4. Можно ли решить эту задачу другим, более быстрым способом, за исключением комментариев по пункту 2 ? Дальше буду читать стандарт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 14:02 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Есть ли смысл добавлять эту проверку ? Нет. Строка "heh" вполне симметрична, хоть и содержит нечётное количество букв. Второй пункт - совершенный бред, а твой способ проверки абсолютно нечитаем. PS: Твой return абсолютно эпичен. Индус?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 14:10 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
Не до конца объяснил, симметрия в данном случае должна быть с полным дублированием. Что не так в return ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 14:14 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
Что в нём нечитаемого ??? Сжимаем отрезок, и делам сумму по модулю два с краёв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 14:15 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто не так в return ? Ты из булевого значения делаешь булево значение. "Зеленее не будет." SashaMercuryЧто в нём нечитаемого ??? Догадаться с первой попытки, что "(*e--^*s++)==0" это сравнение на равенство сможет не всякий. Мне, например, не удалось. А стало быть любой, кто будет после тебя читать и править твой код, сначала тебя обматерит, а потом заменит это на вменяемое "*e-- == *s++". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 14:25 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
Саш, какие цели ты преследуешь когда пишешь такие brainfucks для сообщества? Или ты думаешь что всем разработчикам безумно нравится разбирать программу которая записана в "одну строчку"? Как ты себе предсталвяешь хождение по ней дебаггером? Как в нее можно подставлять переменные? Брейкпоинты? Ведь язык, милый мой создан именно для облегчения человеко-машиинного общения! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 14:45 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Есть ли смысл добавлять эту проверку ? Как вы считаете ? Мне кажется, что если бы эта программа принимала поток данных(на подобие 1 команда, много данных), то смысл был бы. Это зависит только от условий задачи. Как там прописано - так и правильно. SashaMercury Либо сейчас такой оптимизацией никто не занимается, и процессор сам додумает за меня про чётность и нечётность ? Процессор не думает, он выполняет данные ему команды. SashaMercury2.Мне нравится одна моя строчка, она крайне симпатичная, Код: plaintext 1. но я не уверен, что проверка на равенство через сумму по модулю два будет оптимальней чем обычное ==, с одной стороны, как вероятно работает ==, идёт по битам и проверяет до первого различия (8 битовых сравнений максимум, минимум 1), а сумма по модулю два, 8 битовых операций, да плюс от 1 до 8 битовых сравнений. Как лучше сравнивать ? Или мне нужно дизассемблировать, и исходя из этого смотреть ? Посмотри. Только без дизассемблирования видно что ты делаешь две операции (^ и ==) когда достаточно одной (==), т.е. операция ^ просто лишняя. Процессоры не работают с потоками битов, они работают с байтами, поэтому в обоих случаях (^ и ==) процессору дается два байта с операндами, а как уж он эти операнды обрабатывает - этого даже в асмовском коде невидно, это распайку транзисторов надо смотреть :) SashaMercury3.Мне не нравится как я работаю с памятью. Можно ли в Си динамически расширять массив, и можно ли это сделать в данном конкретном случае? Именно в С, не в С ++. в данном случае нельзя, а в Си можно, читай про функции malloc(), calloc(), realloc(), free() SashaMercury4. Можно ли решить эту задачу другим, более быстрым способом, за исключением комментариев по пункту 2 ? нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 14:47 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Ты из булевого значения делаешь булево значение. "Зеленее не будет." верно ведь. Не заметил даже maytonКак в нее можно подставлять переменные? Брейкпоинты? не думал про это ( Можно утверждать что код ниже Код: plaintext 1. моветон, и так делать не надо ? ДмитрийSashaMercury 4. Можно ли решить эту задачу другим, более быстрым способом, за исключением комментариев по пункту 2 ? нет Очень жаль..В который раз наблюдаю как сильно мы ограничены в быстродействие..Хочется быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 15:28 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВ который раз наблюдаю как сильно мы ограничены в быстродействие..Хочется быстрее Не в том месте ты быстродействие ловишь. Твой посимвольный ввод сожрёт его больше чем собственно проверка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 15:34 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМожно утверждать что код ниже Код: plaintext 1. моветон, и так делать не надо ? Всё зависит от того, откуда ты его взял и что будешь делать дальше. Если это опенсорсный проект то он должен быть дружественнен к группе девелоперов. Должен быть ясно и чётко написан и не вызывать сложных двузначных толкований и не иметь побочных эффектов. К примеру в этом исходнике - отсутствует тело цикла. Побочный эффект. Если я добавлю тело - то где будут пост инкременты? И что за сложение по модулю 2. Зачем оно? Почему не сделать простое и ясное сравнение на равенство? Вобщем - лучше эту функцию переписать так чтобы она ложилась на блок-схему 1:1. Преждевременную оптимизацию делать не стоит. Ее результат - спорный и обычно не покрывается тестами. Тоесть говорить о качестве кода на выходе не стоит. Уж лучше написать "деревянный" алгоритм как пишут в Pascal а оптимизацией заниматься тогда когда это станет настоящей проблемой а не надуманной. Вобщем в программировании, особенно где твой код смотрят другие - нужно быть джентльненом и не подсовывать то что-бы ты сам не хотел получить "на анализ". Почитай также про Code Conventions. Как такие вещи делают в Google, IBM, e.t.c. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 15:53 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
SashaMercury Как-то по C#-овски всё. На благородных C-ях где-то так внешне. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 16:01 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
SashaMercuryОчень жаль..В который раз наблюдаю как сильно мы ограничены в быстродействие..Хочется быстрее Зачем быстрее? Тут и так все быстро. В реальных задачах как правило ускоряется то что реально тормозит, например расчет идет 5-10 сек и пользователь может подумать что программа "зависла", в данном случае никто не заметит разницы 1 микросекунду будет твой код работать или две. Шаманства с использованием нестандантных операторов иногда (очень редко) могут дать выигрыш в производительности, но и то какие-то доли-единицы процентов. Заметный эффект дает: 1. Использование алгоритмов. Поизучай алгоритмы сортировки, там хорошо расписано как разные алгоритмы дают разную скорость. 2. Распараллеливание вычислений (ядер нынче много даже в телефонах) 3. Предподготовка данных, чтобы в последний момент сделать минимум операций для получения результата. Например в твоем случае если считать после каждой введенной буквы - результат будет известен до нажатия Enter, т.е. считай мгновенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 16:02 |
|
||
|
Симметричность диапазона байт
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Не в том месте ты быстродействие ловишь. Твой посимвольный ввод сожрёт его больше чем собственно проверка. А есть функции считывающие не посимвольно и эти функции не обёртки ? luislom, у вас как всегда весёлый код, завтра почитаю ) maytonПочитай также про Code Conventions. Как такие вещи делают в Google, IBM, e.t.c. Вот! Вот это я хотел давно увидеть, я ещё не гуглил, но уже понял что я найду ;) ДмитрийШаманства с использованием нестандантных операторов иногда (очень редко) может и так, но мне они нравится, я словно щупаю биты и байты C: Кстати, вспоминается отличная задача на поиск единственного числа без пары в массиве(fe 7 5 9 6 5 7 9 ->6), которая очень элегантно решается через исключающее или. Меня уже гонят..Я стал чуточку умнее. Спасибо всем C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2014, 17:11 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38636948&tid=2019485]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 191ms |

| 0 / 0 |
