Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня нашёл интересный код, сейчас разбираю его. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Собственно процитировал. Синтаксис и форматирование сохранены. Начал разбирать, привожу свою часть кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 1. Какой тип данных у тех переменных у которых не был указан тип данных ? Ранее такое действительно возможно ? 2. Код: plaintext 1. равносильно Код: plaintext 1. ? На всякий случай спросил. Не говорите мне пожалуйста что делает этот код, если вам сразу всё понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 03:55 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Да, и с переменной " к ", тут видимо побочный эффект, то есть идёт изменение самой переменной, и ещё присваивание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 03:57 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
3. Далее идёт Код: plaintext 1. Не хватает оператора ; в for. Или так тоже ранее можно было ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:02 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SSна входе увеличенный на 1. Целое число Это бред. Это ведь указатель сдвигается с имени программы. Я это в принципе написал сразу, а затем бред приписал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:10 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercury3. Далее идёт Код: plaintext 1. Не хватает оператора ; в for. Или так тоже ранее можно было ? Такого там нет. Есть такое "for(h= 0;h*h<= g;++h)" Какой смысл разбирать такие программы? Их же пишут специально чтобы было непонятно. А цель программиста наоборот писать понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:12 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Какой смысл разбирать такие программы? Это как в футболе. Если играть со слабыми соперниками и всегда на идеальном газоне никогда не научишься играть хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:19 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
2 вопрос, сам ответил. Не равносильно относительно переменной b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:40 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Отформатировал. Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:57 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Рефакторинг первых строк в первом приближении, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Хотя тут ещё можно упростить всё что касается h. Пока те замены что я предлагаю верны ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 07:16 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В этом участке кода Код: plaintext 1. 1.В элемент массива записывается d 2. Происходит инкримент d 3. К b добавляется e Так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 08:22 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky Какой смысл разбирать такие программы? Это как в футболе. Если играть со слабыми соперниками и всегда на идеальном газоне никогда не научишься играть хорошо. Это абсолютный бред. И это высказывание, и такие состязания. Кроме как для развлечения они ни для чего не нужны. Я уверен, что только для этого эти соревнования и были придуманы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 09:37 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
int a[900];//тут компилятор сразу ругается, предполагаю что в 1984 если не указывалчся тип данных, по умолчанию был //например char. Хотя Си обладал явной типзацией ? Или нет. int был, а не char. Это в классическом K&R C было. Если сейчас включить такой режим, напр. в GCC, думаю, скомпилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 09:39 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Да написал бы Достоевский Идиота если бы он не читал Гете, Бальзака и Гофмана ? Там похлеще чем этот код. Неужели все считают что такой код не нужен и не полезен ??? Я считаю крайне полезен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 10:31 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ считаю крайне полезен.Чем? Возможностью "залезть на шкаф"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 10:33 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНеужели все считают что такой код не нужен и не полезен ???куда полезней было бы ознакомиться вот с чем: тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 11:52 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
On 24.06.2014 11:31, SashaMercury wrote: > Неужели все считают что такой код не нужен и не полезен ??? > Я считаю крайне полезен. Да, не нужен и не очень полезен. Читать и разбирать такой код отчасти конечно полезно, чтобы возможно уточнить какие-то аспекты языка, которые в реальной жизни никогда и не используются. Но польза в итоге весьма мала. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 12:47 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа написал бы Достоевский Идиота если бы он не читал Гете, Бальзака и Гофмана ? Там похлеще чем этот код. Неужели все считают что такой код не нужен и не полезен ??? Я считаю крайне полезен. Саш, тебя хочется кинуть на какой-то полезный проект. А то зря киловатты и лошадиные силы тратишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 12:51 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Чем? Возможностью "залезть на шкаф"? если человек будет ориентироваться в таком коде, то насколько легко ему будет читать обычный код, находить в нём ошибки ? Прекрасная разминка для головы. Я понимаю что такое рефакторинг, но не знаю наверняка насколько это актуально. Думаю что актуально, читая такой код, и транслируя его в аналогичный, на том-же языке, человек улучшает свои способности в этом разделе программирования. Да и вообще, этот код очень красивый. Его просто приятно разбирать. Мне приятно. Да, ещё наверняка есть такие люди что ищут уязвимости в коде, и скрытые ловушки, чтение и разбор такого кода тоже будет актуально для них. Код, чужой, разный, хороший, плохой, читать нужно. Вы говорите развлечения ? А как-же без этого ;) Я не сомневаюсь что в глубине души вам такой код тоже нравится, и вам самим может быть и хочется поразвлечься и понять что он делает ;) egorych, так это моя любимая книга по программированию, я её не прочитал всю, и не разобрал (слово разобрал тут ключевое), потому что к сожалению приходится занимать порой всякой фигней, и не получается уделять всё время до 18 математике и программированию. Но я постепенно её читаю, и разбираю(к данной книге это ключевое слово). Даже топ создавал. mayton, с большой радостью участвовал бы в каком-нибудь проекте. Только моих знаний скорее всего слишком мало, пока что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 15:33 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryесли человек будет ориентироваться в таком коде, то насколько легко ему будет читать обычный код, находить в нём ошибки ? Прекрасная разминка для головы. Это не плохой код. Это код специально написанный чтобы запутать. Чем запутаннее тем лучше. А плохой код, это код написан плохо неспециально, и чаще всего его автор и не подозревает что код плохой. Уметь разбираться в этих двух видах кода, это совершенно разные скиллы, причем первый из них совершенно бесполезен в прикладной работе. Это примерно как тренироваться жонглировать тенисным мячем чтобы хорошо играть теннис :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 15:55 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. можно ли упростить этот участок кода ? Как я понял, тут происходит какой-то алгоритм сохранения всех чисел до g включительно. Обращение к элементу идёт через "маску" a[b << 5 | c]. b и с принимают значение от 0 до до h. Где h это целая часть корня g(округление в меньшую сторону). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 02:38 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, а сколько времени потребуется хорошему разработчику(не K&R конечно, но очень хорошему) чтобы разобраться в том что делает этот код и сказать что делает эта программа ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 02:44 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Вот исправленная первая треть кода с правильными комментариями Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 03:30 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Вторая часть кода. Вот как с ней лучше работать. Я создал функцию отображения Код: plaintext 1. 2. 3. 4. Вот так теперь выглядит вторая часть кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. А если нарисовать в каком порядке она заполняет массив всеми числами до g включительно, относительно параметров b and c , и классической матрицы a_00-верхлево, a_hk-низправо, вот что мы увидим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 04:12 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Остался вопрос только по этой сточке: Код: plaintext 1. все операции делать слева направо ? сначала Код: plaintext 1. затем результат побитово на Код: plaintext 1. и тд ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 04:29 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky, а сколько времени потребуется хорошему разработчику(не K&R конечно, но очень хорошему) чтобы разобраться в том что делает этот код и сказать что делает эта программа ? Я могу только сказать, сколько времени потребуется чтобы убедить разработчика разбираться в таком. Много. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 04:37 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Ой, я ведь по-моему могу побитовые исключающие или ставить в любом порядке, результат не изменится ? Так ведь ? Значит это выражение можно упростить ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 04:47 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Или нельзя..тогда всё в нулях будет. Слишком просто. Видимо я неправильно понимаю эту строчку. Подскажите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 04:53 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Скорее всего, такой код Код: plaintext 1. 2. 3. 4. будет менять местами значения любых двух элементов, этакий swap. А почему ? Не очень понимаю очередность действий в данном случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 06:02 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. Я кажется понял!! Код нужно читать с конца, для этой строки: 1. x set x^y//new_x 2. y set y^new_x=y^x^y=x//new_y 3. x set new_x^new_y//x^y^y^x^y=x^y^x=y//new_x раскладка тупит на клавиатуре. Так ??А почему так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 06:14 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
В общем программа выводит числа змейкой :) Ниже исправленный код программы в первом приближение: Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 07:08 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТак ??А почему так ?Потому, что "исключающее или": (x XOR y) XOR y == x при любом y. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 07:14 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПотому, что "исключающее или": (x XOR y) XOR y == x при любом y. Это очевидно. Вопрос был: SSЯ кажется понял!! Код нужно читать с конца, для этой строки: 1. x set x^y//new_x 2. y set y^new_x=y^x^y=x//new_y 3. x set new_x^new_y//x^y^y^x^y=x^y^x=y//new Так ??А почему так ? Разбор строки я начал с конца, я не уверен что это так в данном конкретном случае, потому и спрашиваю, так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 07:28 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРефакторинг первых строк в первом приближении, Пока те замены что я предлагаю верны ? Я не знаю, верны ли замены, не смотрел, но ты должен учитывать и то, что в таких программах немаловажным является эстетический эффект (или антиэффект), который возникает у читателя при чтении текста программы. Этот эффект твои "рефакторинги" могут нарушить. Т.е. я это к тому, что там именно так было, возможно, написано именно для внешнего эффекта. А ты всё сломал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 12:02 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Саша, ты ГЛУБОКО НЕПРАВ. авторесли человек будет ориентироваться в таком коде, то насколько легко ему будет читать обычный код, находить в нём ошибки ? Такой код никто никогда не напишет в боевых условиях. авторПрекрасная разминка для головы. Т.е. тебе голову больше нечем занять... Ну, изучай С++, GoF, UML, -- полезнее будет в 1000 раз. авторКод, чужой, разный, хороший, плохой, читать нужно. Это --очень специальный вид кода, чтение которого может принести только ограниченную пользу и специфическое наслаждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 12:12 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРазбор строки я начал с конца, я не уверен что это так в данном конкретном случае, потому и спрашиваю, так ? ассоциативность операции присваивания . Это если учебники/справочники не читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2014, 15:27 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Учебники читаю вроде. Только я почему-то искал операцию ^=. В том же K&R в таблице на странице 55 K&R= += -= ETC. RIGHTTOLEFT А, я на "ETC" не обратил внимание. Теперь понятно Re: Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman MasterZiv Ну, изучай С++, GoF, UML, -- полезнее будет в 1000 раз Сделаю что-нибудь интересное на Си, и начну С++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 01:49 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Если я бы я не разобрал бы этот пример, разве узнал бы я такой красивой конструкции для свопа: Код: plaintext 1. Ну разве она не красивая ?;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 01:50 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
И она, кстати, выполняется также за три действия, и может быть даже быстрее чем классика: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 01:53 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНу разве она не красивая ?;)красивая, но бессмысленная, инты обменивать редко когда требуется, да и читается плохо, по этой же причине. Редко - читай никогда )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 02:14 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСделаю что-нибудь интересное на Си, и начну С++ Напишите парсер С. Заодно и С выучите :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 02:36 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryСделаю что-нибудь интересное на Си, и начну С++ Напишите парсер С. Заодно и С выучите :) Хорошая идея кстати. Одна из моих первых поделок на Си была прога по форматированию кода. Очень помогала в поиске непарных скобок. SashaMercury, попробуй написать парсер, который превратит фарш из первого поста в более читаемый код с отступами, пробелами после разделителей и знаков и т.п. Т.е. прогу которая из 16209640 сделает 16209666 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 07:37 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Dima T Спасибо за советы C: Если честно, я сам об этом подсознательно думал. Вчера перед сном. Но я не был уверен что стоит, но раз вы оба советуете, то и правда стоит. Сначала я сделаю то что предложил Дмитрий, а затем то что предложил Anatoly Moskovsky. ps Только добью restrict и fopen, и начну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 08:02 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Я если чо пошутил. Если только у вас нет несколько месяцев свободного времени :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 14:18 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Сашик. Вот тебе пыщ по Хорьку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 14:22 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Mayton, спасибо за ссылку )) я так понял вы шутите ;) Анатолий(с телефона я замучаюсь вас на транслите называть, потому извините если вас зовут не так), на Си я найду время. Должен же я что-нибудь уже сделать. Только с fopen разберусь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 15:20 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Нет не шучу. Кст. многие разработчики слабо используют возможности хоря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 15:25 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
On 26.06.2014 02:50, SashaMercury wrote: > Если я бы я не разобрал бы этот пример, разве узнал бы я такой красивой > конструкции для свопа: > > x ^= y ^= x ^= y; > > > > Ну разве она не красивая ?;) Красивая. Но я бы программиста, который это использовал бы в production коде уволил бы. (если бы это конечно не было бы оформленно в соотв. функцию или не требовалось исключительно какими-то требованиями производительности или что-то в этом роде, но тогда без комментария -- всё равно бы уволил). Кстати, о производительности. auto other = y; y = x; x = other; -- тут три операции. Точнее, три чтения и три записи. в твоём 3 * 3 + 1 = 10 операций. При этом одна из этих трёх операций ( одно чтение, XOR и одна запись ) ещё и задействует АЛУ. А при обычном swap оно может быть и без АЛУ. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 12:55 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
On 26.06.2014 03:14, egorych wrote: > красивая, но бессмысленная, инты обменивать редко когда требуется, да и > читается плохо, по этой же причине. Редко - читай никогда )) Ну ладно, не так уж и редко. Любая сортировка. А сортировка -- основа многих алгоритмов, да и сама часто используется. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 12:57 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
> Спасибо за советы C: > Если честно, я сам об этом подсознательно думал. Вчера перед сном. Но я > не был уверен что стоит, но раз вы оба советуете, то и правда стоит. > Сначала я сделаю то что предложил Дмитрий, а затем то что предложил > Anatoly Moskovsky. Я бы лучше сделал парсер другого языка сначала, попроще. Типа XML-я или ещё более простое. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 12:58 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Сашок хочешь задачку подкину? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 13:08 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
MasterZivКстати, о производительности. auto other = y; y = x; x = other; -- тут три операции. Точнее, три чтения и три записи. в твоём 3 * 3 + 1 = 10 операций. При этом одна из этих трёх операций ( одно чтение, XOR и одна запись ) ещё и задействует АЛУ. А при обычном swap оно может быть и без АЛУ. Как вы умудрились насчитать десять операций??? Код: sql 1. эквивалентно Код: sql 1. 2. 3. "Вычисление с присваиванием" - одна (логическая) операция. "Физически" будет, скорее, всего, два чтения, две записи и три логические операции (в регистрах). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 13:38 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
maytonСашок хочешь задачку подкину? Конечно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 14:02 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
On 27.06.2014 14:38, Basil A. Sidorov wrote: > Автор: Basil A. Sidorov. MasterZiv > Кстати, о производительности. > > auto other = y; > y = x; > x = other; > > -- тут три операции. Точнее, три чтения и три записи. > > в твоём 3 * 3 + 1 = 10 операций. > При этом одна из этих трёх операций ( одно чтение, XOR и одна запись ) > ещё и задействует АЛУ. А при обычном swap оно может быть и без АЛУ. > > Как вы умудрились насчитать десять операций??? > > x^= y^= x^= y; > > эквивалентно x^= y -- читать x, читать y и выполнить XOR, результат записать в x. И так три раза. Результат предыдущего вычисления (x в данном случае) можно , конечно, не читатЬ, тогда следующие операции -- по 3 , а не по 4. А первая -- +1 даёт. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 14:38 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Это всё замечательно, но применительно к реальной жизни ваш пример - ничем не лучше цепочки xor-ов. Если компилятор предоставляет swap(x, y) - именно эта функция и должна использоваться. А превратит ли её компилятор в две пары push/pop или в загрузку/сохранение пары регистров - забота разработчиков этого компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 14:50 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercurymaytonСашок хочешь задачку подкину? Конечно :) Вот тебе задача. Есть игровой мир. В трёхмерных координатах. X,Y,Z. Состоит из кирпичиков. Каждый кирпичик имеет координаты соотв от (0,0,0) до (1024,1024,1024). Состояние кирпичика определяется 16-битным целым (shot). Кирпичик может быть: - установлен/убран - иметь повреждение от 0 до 15. - иметь тип материала (256 типов в том числе стекло, дерево, бетон) Изначально кирпич не обязательно должен стоять на земле. Его можно поставить в воздухе. Группы кирпичей могут образовывать здания, сооружения. Необходима имплементация следующего интерфейса. Код: plaintext 1. 2. 3. 4. 5. 6. Спецификация кирпичика Код: plaintext 1. 2. 3. 4. 5. При этом надо помнить что память ограничена и по возможности не делать 3-d матриц. Этот код должен работать на сервере где память - ограничена. Второй частью этой разработки будут активные игроки или действия игрового мира. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 15:11 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
mayton, А почему "isSet: 3" когда всего 2 состояния "установлен/убран"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 15:42 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, да верно. Поправил. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 15:52 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Вы хотите решить эту задачу не тратив 2^31 байт ? Я правильно понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 15:54 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercury, да. Не создавая 3-д матрицу. Исходим из предположения что игровой мир будет заполнен не полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 16:22 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Я могу хранить в одномерном, размерностью 2^31. Но это не то, как я понял. То есть мы хотим хранить элементов столько, сколько есть непустых. Где isSet true. Уже гонят спать..подумаю, мне кажется это вполне реализуемо. Спасибо за задачу :) Ps Я могу применить malloc дважды к одному указателю ? " Довыделить память " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 16:34 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Размерностью 2^30 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 16:34 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ могу применить malloc дважды к одному указателю ? " Довыделить память " realloc() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 16:36 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 26.06.2014 03:14, egorych wrote: > красивая, но бессмысленная, инты обменивать редко когда требуется, да и > читается плохо, по этой же причине. Редко - читай никогда )) Ну ладно, не так уж и редко. Любая сортировка. А сортировка -- основа многих алгоритмов, да и сама часто используется. и часто ты сам сортировку пишешь? std::sort - и вуаля ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 18:10 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
maytonВот тебе задача... Не издевайся, неподъемная задача. Он алгоритмы не изучил. Тут сортировки как минимум надо освоить. Да и задача неполноценная, надо какую-то статистику по однотипным элементам ввести в условие, например сколько неиспользуемых элементов и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 18:43 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Dima T, А по мне - слишком простая (для Саши) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2014, 20:36 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Как работать с value понятно, тут проблем нет. Нужно решить проблему с однозначно адресуемым расширяемым массивов, либо с тем как хранить эти кирпичи чтобы однозначно адресовать по xyz. Спецификацию кирпича расширять нельзя ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 07:19 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Можно еще подумать, и возможно как то использовать коды Грея или кривую Гильберта. Но вы не подсказывайте. Я только начал думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 07:21 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Думай. Спецификацию кирпича я расширять не планирую. Ну даже если расширять то в крайнем случае заменить short на int. Это не влияет принципально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 13:33 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Самый простой вариант после матриц, такой(только тут проблемы с выделением памяти, уже час пытаюсь понять в чём дело, а на этом пк нет стандарта Си), но я думаю что алгоритм понятен Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Очевидный минус(после исправления ошибки с выделением памяти), время доступа к элементу ~O(n). И второй минус, трачу в два раза больше памяти чем элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 16:53 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Но это конечно не то. Нужно(и скорее всего можно) по-другому решить эту задачу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 17:15 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Ваши sizeof(buf) возвращают размер указателя. Это, как максимум, восемь байт. Хотите выделить память для массива элементов - определяетесь с размером и выделяете "размер * sizeof(тип)" байт. Дополнительно определяетесь со способом определения размера массива. Чтобы использовать одно и ту же логику во всех частях программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2014, 20:22 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо это конечно не то. Нужно(и скорее всего можно) по-другому решить эту задачу Эту задачу можно решить тысячами способов. Код твой я еще не смотрел. Но сходу предложу использовать Stdint.h для фиксации типов данных. А такой фокус как sizeof(int) лучше вообще не использовать. Никогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 17:36 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Тут как раз таки в первую очередь "никогда" - это к sizeof(buf), который типа int*. Это даже если вдруг забыть, что значение buf изначально используется не инициализированным. Да и O(n) на доступ к записям по координатам как-то слишком много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 19:16 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Я только код исправлю. Пока что не проверяйте. wstДа и O(n) на доступ к записям по координатам как-то слишком много. Ну это предел сверху. Вот если бы я мог записывать в те адреса памяти что я хочу (в пределах той памяти что выделена), это было бы хорошо. Хотя что хорошего, вся программа была бы разбросана кусками. Пока что я не вижу другого варианта. Мне приходится хранить пару, значение и код координаты. И когда я хочу получить значение, очевидно что у меня происходит запрос select value from table t where ID=' '. И потом max это количество строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 02:13 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
wstна доступ к записям по координатам как-то слишком много. и не к записям, а к чтению! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 02:14 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНу это предел сверхуЭто не предел сверху. Это именно что оценка времени доступа при линейном поиске.Мне приходится хранить пару, значение и код координаты. И когда я хочу получить значение... то хранение в упорядоченном списке позволяет использовать двоичный поиск. Правда, возникает задача обеспечения и поддержания этой самой упорядоченности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 02:18 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Re: Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman Basil A. Sidorov ... то хранение в упорядоченном списке позволяет использовать двоичный поиск. Правда, возникает задача обеспечения и поддержания этой самой упорядоченности. Вы думали что мне это не пришло в голову после комментария от Дмитрия про сортировку ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 03:03 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Я не думал. Я как чукча - что вижу, то и пою ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 03:10 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ когда я хочу получить значение, очевидно что у меня происходит запрос select value from table t where ID=' '. И потом max это количество строк Ну раз вы привели аналогию с запросом к СУБД, то вам наверно не должно составить труда вспомнить, каким образом подобные запросы там оптимизируются до O(log n), а то и O(1) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 03:15 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Я не думал. Я как чукча - что вижу, то и пою я на вас не обзывался, извините если вы подумали что я критикую вас. Это был не ответ в стиле-отвалите, мне и так всё понятно, а ответ спокойным тоном- я это понимаю. Anatoly Moskovsky, да я тут с памятью ещё разбираюсь. Что-то не так делаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 03:59 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Нужно выделять память в конец текущего массива ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 04:01 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Она(среда выполнения) хотела чтобы я сразу выделил память на указатель Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 06:03 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Разобрался с памятью. Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. Осталось разобраться с sizeof(), и оптимизировать поиск элемента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 07:03 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРазобрался с памятью. Код: plaintext 1. Единственная проблема - это не С, а С++, потому что С не позволяет инициализировать глобальные переменные неконстантами Если уж изучать С, так и компилировать наверно нужно компилятором С, а не С++. А то такого наизучаете ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 13:28 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕдинственная проблема - это не С, а С++, потому что С не позволяет инициализировать глобальные переменные неконстантами Этого я не знал. Спасибо. Добавляю простую индексацию. Пришёл к выводу что функция SetBrick() должна возвращать что-то, вдруг мы добавляем два одинаковых кирпича. Да и вообще, теперь мне кажется что любая функция должна возвращать свой код, чтобы знать, успешно ли она выполнилась или нет. Может и ошибаюсь, но почему-то мне кажется что где-нибудь в канонах программирования написано-"каждая функция должна возвращать что-то"(-1 неудача, 1 всё ок) :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 03:52 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Формирую блок таким образом: 1int - value 1int - код координаты 3int - номер по возрастранию Потратил час на функцию, не продумав поиск. Таким образом в этом же блоке хранить номер (по возрастанию) нет смысла. Нужно выделять для этого отдельную область памяти. Вот функция, но сейчас буду переделывать её Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 05:57 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Нет, тут плохой код. Мне уже даже циклы не нравятся тут. Не смотрите. В общем выложу как будет готово и проверено. А то выкладываешь, и видишь потом что можно сделать лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 06:55 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Единственная проблема - это не С, а С++, потому что С не позволяет инициализировать глобальные переменные неконстантами Если уж изучать С, так и компилировать наверно нужно компилятором С, а не С++. А то такого наизучаете ... Всё таки это проблема. Я думал что можно решить её позже, но мне не нравится что мне приходится выделять память сразу. Из-за этого приходится поддерживать две переменные up_block, count_block. Они несут одинаковый смысл практически, различие между ними как между де-юре и де-факто. Там две переменных с одной смысловой нагрузкой, тут две переменных, получите распишитесь плохой код: Код: 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. 28. Не могу нормально индексацией заняться, пока не решу проблему с памятью, либо не решу что это невозможно сделать. Подскажите пожалуйста, как поступить чтобы не выделять лишнюю память ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 07:54 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНе могу нормально индексацией заняться, пока не решу проблему с памятью, либо не решу что это невозможно сделать. Подскажите пожалуйста, как поступить чтобы не выделять лишнюю память ? Я пока не ставлю задачи "уплотнения" памяти. Аллоцируй как удобно - потом попробуем оценить потери на аллокациях. Кстати нашёл статью. Самому интересно. http://www.gamedev.net/page/resources/_/technical/general-programming/c-custom-memory-allocation-r3010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2014, 20:18 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
mayton, спасибо, статью попозже посмотрю, вдруг там какая подсказка, хочу сам сделать так, как я пока могу, и только из своих размышлений, а потом почитаю как это делается правильно. SSНе могу нормально индексацией заняться, пока не решу проблему с памятью, либо не решу что это невозможно сделать. Подскажите пожалуйста, как поступить чтобы не выделять лишнюю память ? Вчера пока играл в футбол решил эту проблему частично. Мысль неожиданно пришла в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 02:59 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Посмотрите пожалуйста, похож ли участок кода ниже на правду ? Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. В этом куске кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. , первоначально именовал переменные по которым бежит цикл как i и j. Но очень быстро догадался их назвать по нормальному. Чудесный кусок кода C: В кои века мне что-то понравилось у себя. PS хотя сейчас я понял что l похожа на 1 ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 04:43 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Да, и я подумал ещё. Мне кажется нужно по аналогии с СУБД реализовать все CRUD операции, и назвать их как : createBrick(),readBrick(),updateBrick(),deleteBrick(). Или ошибаюсь ? Но сначала нужно убедить что setBrick()(createBrick()), похожа на правду, и исходя из её работы дальше можно плясать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 04:46 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВчера пока играл в футбол решил эту проблему частично. Мысль неожиданно пришла в голову.Вот когда эта мысль тебе приснится, тогда можешь считать себя настоящим программистом. А футбол .... ну почти не считается, хотя и близко. А пока подсказка: почитай о хеш функциях и хешированием с хвостами (не помню как это правильно называется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 05:29 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
White Owl А пока подсказка: почитай о хеш функциях и хешированием с хвостами (не помню как это правильно называется). спасибо. Только сначала сделаю как я могу сам, найду скорость на каждую операцию, а потом почитаю как это правильно делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 06:19 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа, и я подумал ещё. Мне кажется нужно по аналогии с СУБД реализовать все CRUD операции, и назвать их как : createBrick(),readBrick(),updateBrick(),deleteBrick(). Или ошибаюсь ? Но сначала нужно убедить что setBrick()(createBrick()), похожа на правду, и исходя из её работы дальше можно плясать Для данной задачи - непринципиально будет ли setBrick или CRUD с кирпичами. И сама постановка с СУБД - избыточна. Но дам подсказку. Кирпичи обычно стоят блоками или группами. На этом можно соптимизировать хранение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 08:40 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Такой кусок кода Код: plaintext 1. 2. 3. я обычно записываю так Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 08:43 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
maytonКирпичи обычно стоят блоками или группами. думал про это, но даже если у меня будет некоторый аналог триангуляции (не знаю как это правильно называется в программировании, это термин из математики), и буду хранить например координаты диагонали параллелепипедов, то у меня будут приличные проблемы для формирования этих диагоналей. Нюансы будут и с соседними кубиками.И при удалении одного кирпича из кубика, куб пропадает, надо будет перестраивать весь буфер. Да и вообще, стреляет танк(не знаю откуда ассоциации с танками) в здание, верхний слой повреждён, а внутреннего значение value то-же. Нужно снова перестраивать массив. Нужно будет ввести норму для сортировки кубиков, но это в принципе не сложно, но всё-таки. Куча нюансов. Код: plaintext 1. 2. 3. Конечно можно и так,но мне показалось что не нужно вводить лишнюю переменную, в целом и так понятно что происходит. Хотя если бы в блоке было 30 элементов например, то я согласен с тем что ваш код был бы более приятен для чтения. Скорее всего. Допустим пока я храню каждый кирпич отдельно. Код для вставки кирпича в массив похож на правду ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 15:33 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercury, По управлению памятью. Отделите задачу по расширению массива (включая такую абстракцию как блоки) от собственно алгоритма использующего массив как контейнер. Алгоритму вовсе не зачем оперировать таким понятием как блок из нескольких элементов массива, если он работает с одним элементом. Поэтому рекомендую сделать такие функции: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. А уже в вашем алгоритме работать с массивом только через эти функции. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Обратите внимание, как резко упрощается код. ЗЫ. Кстати а с чего вы решили, что если кирпич уже существует то set должно вернуть ошибку? Надо просто заменить старое значение новым :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2014, 16:46 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо. Кое что сейчас использую. А зачем хранить каждую координату отдельно ? Ведь хватит 4 байт для хранения всех координат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 02:25 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Я тоже их хотел хранить в структуре, и спрашивал про это у mayton_a, но огн сказал что не предполагает менять структуру хранения данных. Потому не стал добавлять координаты в структуру. SSКак работать с value понятно, тут проблем нет. Нужно решить проблему с однозначно адресуемым расширяемым массивов, либо с тем как хранить эти кирпичи чтобы однозначно адресовать по xyz. Спецификацию кирпича расширять нельзя ? maytonСпецификацию кирпича я расширять не планирую. Ну даже если расширять то в крайнем случае заменить short на int. Это не влияет принципально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 02:29 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА зачем хранить каждую координату отдельно ? Ведь хватит 4 байт для хранения всех координат это уже ваши заботы, я писал как мне проще - мне некогда тут оптимизировать, проект горит :) SashaMercuryЯ тоже их хотел хранить в структуре, и спрашивал про это у mayton_a, но огн сказал что не предполагает менять структуру хранения данных. Потому не стал добавлять координаты в структуру. Так то данные. А координаты они снаружи данных. Никакого противоречия тут нет. О том как хранить координаты никаких требований не было. А если буквально воспринимать что надо хранить только полезные данные и ничего более, то вам останется только в 3-мерном массиве все размещать. Т.е. потребление памяти будет максимальным. А это вовсе не то что требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 02:59 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryА зачем хранить каждую координату отдельно ? Ведь хватит 4 байт для хранения всех координат это уже ваши заботы, я писал как мне проще - мне некогда тут оптимизировать, проект горит :) Кстати, вовсе и не нужно с битами возиться чтобы упаковать координаты в int. Код: plaintext 1. 2. 3. 4. 5. 6. packed нужен, чтобы убрать после value 2 заполняющих байта из-за выравнивания . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 03:19 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Сделал так, но почему-то не добавляется второй элемент. Не стал делать функцию для возврата количества элементов. Мне показалось что достаточно глобальной переменной. Код: 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. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 03:42 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Даже так можно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 04:16 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
malloc() вижу, а вот где free к нему? Все-таки стандартная куча вряд ли хорошо перенесет одновременно столько утечек и realloc-ов. И это если забыть обо всей остальной программе, которая тоже может кучей пользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 08:43 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
wstmalloc() вижу, а вот где free к нему? Все-таки стандартная куча вряд ли хорошо перенесет одновременно столько утечек и realloc-ов. И это если забыть обо всей остальной программе, которая тоже может кучей пользоваться. Это часть программы, не волнуйтесь, дальше он есть. Лучше подскажите почему не добавляется второй элемент ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 08:58 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЛучше подскажите почему не добавляется второй элемент ) Что еще за "buf_b + 3" когда в buf_b всего 2 элемента? Тут может быть индекс только 0 и 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 13:40 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Дурной совсем. Верно ведь. Я и записываю неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:01 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Мне думается процедуру поиска можно немного оптимизировать. Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. PS Вчера начал читать первый том Кнута. Товарищ принес, прочитал уже 50 страниц, и выполнил часть упражнений. Очень здорово написано с юмором и вообще теперь она мне нравится больше остальных книг по программированию C: Изначально математика, потому читать и делать упражнения пока просто. Понравилось что уже на 30 странице вроде я встретил словосочетание неподвижная точка, этого достаточно чтобы понять что книга не дерьмо, и её mast have прочитать . 2,56 за ошибку тоже здорово, я кстати первые 10 секунд не мог понять почему такая сумма :D А над упражнением доказать теорему Ферма, я смеялся минут 10 ахахахах. Впрочем кому я рассказываю, думаю среди нас нет таких ужс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 09:25 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Хотя лучше разделить функции search и read. Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 02:19 |
|
||
|
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
|
|||
|---|---|---|---|
|
#18+
Коллеги. Я решил обобщить SWAP(...) на базе xor. Только добавил своё условие. Для более чем 2 аргументов SWAP должен выполнять ротацию (вращение) всех аргументов. Вот что получилось. Код: plaintext 1. 2. 3. 4. 5. 6. Nx1x2x3x4Comment11234OK!23177326054465152343OK! but, x4=x1^x461772760548651293431 OK! But.... e.t.c.107726 110546125123134317 147260155465161234OK! За 16 итераций вектор из 4 элемнетов полностью делает поворот. При этом. - В некоторых фазах можно угадать фрагменты повёрнутого неполного вектора. - В методе есть некая определённая криптографическая самодостаточность. Вектор сам является ключом шифрования по отношению к самому себе. Если вектор из 1 млн элементов будет развёрнут 500 тыс раз то для его восстановления в любом случае нужно будет провести еще 500 тыс разворотов. Либо поискать более быстрый способ возврата вектора в начальное стартовое состояние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2015, 20:56 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019161]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
101ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 200ms |

| 0 / 0 |
