Блог пользователя SyFy

Автор SyFy, 16 лет назад, По-русски
Обфускация кода.
Можно ли правилами КодФорса?
Думаю, что нельзя, но в правилах (а их вообще я толком не нашел, нет нужного так всем FAQ) это не отмечено.

А в новом формате КодФорса, обфускация может спасти от взломов.
  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Думаю раз не запрещено значит можно. А что в этом такого?
16 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится
Ну будет запрещена, наверное. А в правилах это не отмечено, потому что да, их еще нет.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А смысл? Уж лучше больше закодить, или больше похакать.
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Если не взломают, так на систестах упадёшь. Тебе жалко 100 баллов кому то отдать, за влом гавнорешения? На таблицу итоговую это мало как повлияет.
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +1 Проголосовать: не нравится
      А теперь представь, что это правилами разрешено, и половина народу стала обфусцировать свой код. Тебе все еще будет не жалко?
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Не там написал, еще раз:
      Ну на реальном контесте: да, жалко 100 баллов. Пусть лучше на систестах упадет.
      Правда лучший вариант, если жаль это написать без ошибок.
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Тут конечно есть еще такой момент, когда ты не уверен в решении, и хочешь, чтобы твой код взламывали. Тогда, понятно, обфусцировать невыгодно :)
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Ну на реальном контесте: да, жалко 100 баллов. Пусть лучше на систестах упадет.
Правда лучший вариант, если жаль это написать без ошибок.
16 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится
Обфускация будет запрещена
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Такой вопрос, немного оффтоп, но по смежной теме: Стоит ли использовать всякие привычные, понятные и удобные, например, дефайны в каких-либо больших и серьёзных проектах? Или лучше не стоит, чтобы потом не искать всякие нетривиальные баги?
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Думаю не стоит.. ибо не красивый это код... Люди стремятся к объектности - объекстность делает код красивым, а дефайны, имхо, вообще в гавно код превращают
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Неужели это говнокод (ссылка)? :(
      Там всего лишь один дефайн.
      #define loop(i,a,b) for(int i=a;i<b;++i)
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        И в коде это выглядит вот так:
        loop ( i, 0, c.size() )
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Не знаю.. может многие со мной и не согласятся, но мне очень не нравятся дефайны. Помимо некрасивости, их очень сложно челленджить.
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Да, я считаю, что это плохой код. Строка с loop ничем не лучше, чем строка с for — ни краткости, ни понятности, ни выразительности не прибавилось. Зато при компиляции со всеми предупреждениями g++ 4.x тебе скажет, что ты сравниваешь знаковый тип (i) с беззнаковым (.size). А значит, когда тебе действительно понадобится получить полезную информацию из предупреждений (в других местах программы что-то будет не работать), ты потратишь дополнительное время на то, чтобы разобраться, откуда в этом месте кода предупреждение. Поскольку оно надёжно обфусцировано дефайном, времени уйдёт больше, чем на аналогичную запись с for-ом.
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Если ты хочешь, чтобы кто-то когда-то понял твой код — его нужно делать максимально понятным. А даже на топкодере дефайны у всех разные (бывают версии FOR, FORN, REP, заводящие переменную цикла, а бывают — нет; тип этой переменной тоже не все задают одинаковый; цикл бывает до n и до n - 1; ...).

    У меня встречный вопрос: в чём смысл таких дефайнов? Они более выразительны? Их быстрее набирать? Один раз запомнив, их легче читать? А может, наоборот, это чтобы на челлендже вас другие читать не стали?

    Если стандартные средства Си (без дефайнов) так уж неудобны — возможно, вам больше подойдёт другой цельный язык, более понятный, интуитивный и богатый, чем костыли к Си, которые у всех получаются разными?
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +5 Проголосовать: не нравится
      > Зато при компиляции со всеми предупреждениями g++ 4.x тебе скажет, что ты сравниваешь знаковый тип (i) с беззнаковым (.size).
      Это точно. :)

      > Поскольку оно надёжно обфусцировано дефайном...
      Цель усложнения кода не преследую.

      > У меня встречный вопрос: в чём смысл таких дефайнов?
      Лично для меня в скорости. Впрочем сейчас ещё не поздно переучиться быстро писать обычный for. :-)

      Gassa, спасибо за конструктивную критику.
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        >> Поскольку оно надёжно обфусцировано дефайном...
        > Цель усложнения кода не преследую.
        Дык, оно само так получается. В данном случае будет так:

        a.cpp:12: warning: comparison between signed and unsigned integer expressions

        Смотришь на 12 строку, а там нет оператора сравнения. Нужно найти (4 строка) и прочитать (увидеть знак <) дефайн, чтобы понять. И не просто прочитать 4-ю строку, а подставить глазами вместо b то, что указано в 12 строке. На это тратится время и внимание.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Еще один вопрос. Разрешен ли prewritten code?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Ок. Я прочитал все комментарии и у меня остался один вопрос.

А что такое обфускация?

Создание умышленно непонятного кода? 

А можно примеры?

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Вопрос соответственно возникает: а когда будет создан КодФорсовский собственный ФАК?