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

Автор Nerevar, 15 лет назад, По-русски
В одном из обсуждений зашла речь про использование на соревнованиях prewritten code (части кода, которые были написаны до начала соревнования и копируются в код решения). К сожалению, имеют место и другие вещи, которые справедливо можно назвать читерством и надо порицать. Не знаю, будет ли в правилах Codeforces что-либо сказано на этот счет, но по-моему это стоит обсудить.

На разных соревнованиях к использованию prewritten code относятся по-разному. В соревнованиях ACM ICPC это, естественно, запрещено. Однако замечу, что ACM ICPC состоит из онсайт-соревнований, поэтому проконтролировать соблюдение этого правила элементарно. Проблема с применением этого правила возникает на онлайн-соревнованиях. На наиболее известных соревнованиях (TopCoder и GCJ) к этому подходят просто: использование prewritten code разрешено. Есть, к примеру, соревнования snarknews, проводимые при поддержке журнала Мир ПК (pcworld.snarknews.info ). На них использование prewritten code строжайшим образом запрещено. Я совершенно уверен, что огромное количество участников этих соревнований в той или иной степени нарушает это правило, однако случаи, когда кто-либо за это наказывался, единичны. В одной из таких ситуаций человек отправил солидное по размеру решение через пару минут после начала соревнования, т.е. только полнейшая очевидность нарушения стала причиной дисквалификации. Олег Христенко, помнится, тогда на сайте писал, что, мол, поскольку заявки на мировой рекорд по скорости набора кода подано не было, то человек использовал prewritten code.

На соревнованиях snarknews характерно применение еще одного "запрещенного приема". Дело в том, что задачи для этих соревнований зачастую не оригинальные, а целиком берутся с уже прошедших зарубежных соревнований. Соответственно, при наличии навыков поиска в интернете можно найти и тесты, и авторские решения. Удивительно, но находились люди, которые просто отсылали авторские решения. Опять же в силу очевидности нарушения их постигало наказание. Но к использованию тестов к задаче и авторских решений можно подходить и с большей осторожностью...

Но это все мелочи. Эти нарушения "закладываются" в не самой удачной, на мой взляд, концепции конкретных соревнований. Для того, чтобы таких нарушений не было, достаточно 1) разрешить использование prewritten code и 2) готовить для соревнований оригигальные задачи.

А теперь о более серьезной вещи, которая может случиться на любых онлайн-соревнованиях. Речь об обмене кодом между участниками. Это самое серьезное нарушение, пункт о котором есть в правилах практически каждого соревнования. За это грозят пожизненной дисквалификацией и прочими карами. И хочется верить организаторам, что они действительно способны покарать читеров. Но насчет этого есть сомнения. И корень этих сомнений в том, что совершенно непонятно, как это проконтролировать. Кому-то может показаться, что это совсем просто: надо глазом (или программно) сравнить решения и сделать вывод, имела ли место передача кода. Не работает. Расскажу один случай. Дело в том, что меня хотели дисквалифицировать с Google Code Jam 2009 по подозрению в таком читерстве. Об этом можно почитать здесь . Обошлось:))

Тогда я в первый раз задумался, а как же просто, грамотно и эффективно бороться с подобными нарушениями правил? Какие у вас есть идеи? Какие еще разновидности читерства на онлайн-соревнованиях вы знаете? Сталкивались ли вы когда-нибудь с такими случаями? Были ли виновные наказаны?
  • Проголосовать: нравится
  • +12
  • Проголосовать: не нравится

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Можно еще вспомнить о соревнованиях TopCoder - там есть большой простор для читеров. Можно например меняться задачами (текстами условий, открывая задачи позже и получая больше баллов), можно научиться грабить решения при челлендже в файлик (тоже не бог весть какой сложности проблема) и т.д. Но! Несмотря на все это соревнования TopCoder являются самыми популярными из online-соревнований.

Я думаю, что те участники кто достиг определенного уровня не занимаются подобной ерундой, а если чем-то подобным промышляет кто-то из не-верха таблицы, то и черт с ними - сам же получит меньше фана.

С другой стороны правила хороших соревнований не должны поощерять читерство или делать его легко доступным. Кроме того, правила соревнований должны недвусмыслено специфицировать что делать можно, а что нельзя.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Более правдоподобным является предположение, что достигшие определенного уровня не занимаются этим потому, что участвуют в онсайт-соревнованиях, где может вскрыться неумение обходиться без читерства.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да нет. Просто участникам, "достигшим определенного уровня", это не нужно, для них соревнования - это развлечение, возможно, хобби. Они получают удовольствие от процесса соревнования, и от своих результатов. Если же эти результаты достигаются только с использованием какого-то обмана, то о каком удовольствии можно говорить? 
      Для меня вот, например, заоблачная мечта - выиграть SRM. Если я его в действительности выиграю, скопировав код решения, то никакого удовлетворения я от реализации своей мечты не получу. И зачем спрашивается оно мне надо? 
      • 15 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        А реально ли выиграть SRM, скопировав решение?

        Какую ценность представляет ли ценность сам контест, на котором можно выиграть, скопировав решение?


        • 15 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          На соревнованиях TopCoder почти никогда не встречается задач, для решения которых требуется написать какой-то очень сложный стандартный алгоритм или реализовать сложную структуру данных. Поэтому получить значительное преимущество от копирования большого сложного заранее заготовленного кода нельзя. Поэтому едва ли среднему участнику реально выиграть SRM только за счет prewritten code. 
          • 15 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Вообще, я имел ввиду не столько prewritten code, сколько использование чьей-то чужой помощи и/или дополнительного аккаунта. 
            • 15 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Интересно, я умудрился получить молчаливый минус даже за пояснение своего же собственного сообщения :)
              • 15 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Вообще кошмарное что-то происходит..
                Меня аналогичным образом так же оценивали - одним словом НЕАДЕКВАТ 
                • 15 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  А я об этом уже давно писал куда надо. Но это опять посчитали моей глупой выходкой... (
                  • 15 лет назад, # ^ |
                      Проголосовать: нравится 0 Проголосовать: не нравится
                    Я тебя сейчас плюсанул Олег))
                    Но каким то странным образом человеку выше достался одновременно минус... хммм
                    убрали бы эти +/-, кому они нужны
                    Или хотя бы только - убрали
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Помнится, у Сергея Назарова дипломная работа состояла в написании достаточно продвинутой и  наукоемкой системы, которая анализирует исходные коды программ на популярных языках программирования на предмет схожести. Он еще тогда шутил, что как допишет, все решения на acm.sgu.ru проверит ей и всех разоблачит:) Он вроде делал веб-приложение на Java. Может, стоит попробовать прикрутить ради интереса? Надо только выяснить, в каком она у него состоянии.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Анализировать лучше не исходные коды, а их скомпилированный результат.
    Тогда всякие переименования переменных, накидывание лишнего кода и прочие подобные ухищрения не помогут. Насколько я знаю, подобный анализ реализован в проверяющей системе Вологодского ГТУ.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      А что, если "уведут" только идею и переведут на другой программный язык? Так же я подозреваю, что можно такую систему обмануть.. навешать всякой "лапшы" , сделать эквивалентные замены и т.п.

      По поводу системы Вологодского ГТУ - Сам не знаю,но прикольно выглядит вердикт системы - "Плагиат 100%" ))

      • 15 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится
        Насчет другого языка наверное действительно проблема, особенно если один язык типа С++ а другой типа Java. Где код компилируется в принципиально разные конструкции.

        Лапша не поможет, т.к. умный компилятор должен выкинуть ее при оптимизации. Понятно что обмануть все равно можно, вопрос в том какие придется приложить усилия.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Мне кажется, что синтаксические деревья анализировать все-таки проще, чем скомпилированный код. Как раз имена переменных тут вообще роли не играют, а накидывание лишнего кода тоже можно вычислить. На самом деле оптимизаторы сейчас довольно умные, и минимальное синтаксическое изменение может привести к совсем другому сгенерированному коду. Нужно только знать, что менять.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    К сожалению, эта штука работает только с C/C++ и Java исходниками.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Да, я со всеми вами согласен. Можно действительно надеяться, что никому это не надо и никто этого делать не будет. Но я хотел увидеть какие-то идеи и предложения, которые могли бы помочь бороться с этими явлениями или минимизировать их появление. Вот мои соображения:

1. Разрешить использование prewritten code на Codeforces, потому как ничего страшного в этом нет.
2. Сделать доступным просмотр решений любого участника после соревнований. Максимальная открытость - одно из лучших средств борьбы с читерством.
3. Ну, и конечно, четко прописать в правилах (которые должны вскоре появиться) различные виды наказаний за подобные вещи. Даже если особых способов контроля не будет.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    А видимо другого выхода и нет, кроме как разрешить prewritten :)


    Разве что можно запретить копипаст готового кода с интернета, но это же опять всплывает вопрос случайных совпадений... Вот допустим я напишу в контесте точно такой же код, как у себя на сайте :) Да и у других точно так же может случайно совпасть... Так что это кажется нерешаемой проблемой, в рамках онлайн-контеста. Только разрешать. А там уже каждый для себя будет решать.

15 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Этот вопрос очень относителен, потому что всегда могут найтись два человека, которые найдут одинаковое решение задачи, а потом, возможно, похоже реализуют его. Вероятность этого опускать нельзя. => общение участников во время соревнования определить со 100% вероятностью не получится. => В этом пункте стоит надеяться на честную игру участников.
Проконтролировать, что и кто скопировал в свои решения и откуда тоже с 100% веоятностью нельзя. Зачастую такие попытки будут приводить к наказанию невиновных => что-либо из разряда использования заготовок запрещать глупо.

Следует просто написать правила олимпиады так, как если бы она проходила очно. Лично я, если запретят использовать шаблоны кода, не буду их использовать. Единственное, что я копирую: список заголовочных файлов. Каждый, кого я знаю, никогда не станет общаться с кем-либо, если он участвует в контесте. Да просто потому, что время дорого. И в любом личном соревновании каждый сам за себя. А все интернет олимпиады - тренировочная площадка. А тренируется каждый для себя.

А, как правило, тому, кто плохо программирует, врядли помогут чьи-либо исходные коды. Если только решение совпадает один в один. А тому, кто хорошо, это просто-напросто не нужно.

Следовательно:
1) Правила олимпиады
2) "Надежда" на честную игру, что больше переводится в надежду на сознательноть тех, кто участвует, что, по-моему, заставляет вероятность нечестной игры стремиться к нулю. "Нечестная игра" реальной пользы не приносит, разве что цифру напротив имени.
3) Все-таки есть вариант поставить какие-то ограничения, пусть даже чересчур строгие. Читерство - дисквалификация из раунда. Чтобы у людей не было даже желания этим заниматься. Но... Но... Люди, конечно, будут понимать, что на компьютер обижаться глупо... Но... Довольно абстрактный вопрос. Если хотеть контроллировать все... То надо писать прикладное приложение, которое будет работать с сервером... В нем надо будет установить ограничения на то, чтобы оно могло запускаться только от суперпользователя, при открытии блокировало или логировало любые действия с файловой системой и буфером, писать удобный редактор, в котором можно было бы компилировать и тестировать, а может и дебажить решение. Сами видите, что это уже больше похоже на ядро с определенным программным обеспечением и надстройками, может быть на загрузочный дистрибутив. Да, который не будет поддерживать или разрешать подключение флешек, вставку дисков, контроллировать опред образом сетевой доступ, работу с файловой системой, единственное доступное - вход на codeforces и онлайн работа с исходниками, либо все-таки логирование работы с файловой системой, или что-то... вроде использования определенной свободной области на жестком диске, но не самим пользователем, а операционкой и ее приложениями. Ккакой-то редактор нужен... Но это уже более реально. Если отталкиваться от программного обеспечения, спец дистрибутива. Но это трудоемко... Очень... Но это в то же время перспективно... Я бы этим занялся... Если появится такое решение, то все олимпиады можно будет проводить с простым выходом в интернет, удаленно и объективно.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Все-таки есть прокол в этой системе с контролирующим приложением.
    Никто не мешает писать контест на одном компе, а читить на другом (искать в интернете, переписывать код с экрана)
    Особенно удобно такое делать с двумя ноутами, поставив их рядом.
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да) Я думал об этом) Для полной надежности можно настроить использование веб камеры и микрофона) И установить правило на обязательное их использование для участия в контесте. Написать программу "слежения" за картинкой + выборочная проверка. Наиболее подозрительные моменты отправлять админам.
      • 15 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Ну да, это уже, конечно, круто.
        Пока не вижу лазеек.
        С камерой и микрофоном эти почти онсайт выходит.
        Но как писать программы для слежения и проверки?
        Это ж надо совершить прорыв в теории искусственного интеллекта и обработки изображений.

        А хотя нет, уже вижу какие-то проблески, как прочитить.
        Можно залепить камеру какой-то картинкой с роликом, где ты сидишь и что-то пишешь на контесте. Ну а микрофон сам по себе особо не спасет.
        Разве что от звонков друзьям, но вполне достаточно и интернета на соседнем компе для любого рода читерств.
        • 15 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Да, все это, теоретически возмножно и невозможно. Думаю, что перспективы в этом есть. Обработка видео для слежения... об этом уже есть статьи. Звук - тоже.
          Я не думаю, что так просто будет убить или обмануть все системы... Например, если выпускать готовый продукт, как, например, OLPC. Все onboard. И камера и микрофон, корпус без возможности самостоятельной разброки, системы защиты и проверки работоспособности и родства комплектующих (это на уровне их разработки что-то особенное надо заложить), срабатывание при любом вторжении. Проверка работоспособности видео камеры и микрофона и их целостности, какая-то проверка на целостность и реальность картинки. Сейчас это просто слова, которые в теории, если эти слова выполнятся, сделают еще один шаг к полной изоляции людей в своих квартирах, что тоже не совсем хорошо. Но любой прорыв можно как-то использовать. Почти все в этом мире, понятное дело, можно взломать, обмануть, привести к ошибке, зациклить...
          Но интересно как первое, так и второе. Защита - взлом)
          Данная система дорога... сама по себе. И только из-за этого врядли будет реализована так или иначе. Хотя, майкрософт или appel, были бы непротив провести еще одну революцию) железную или программную, но все же.
          • 15 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Мысли, мысли. Если об этом думать более серьезно, то, я думаю, это можно было бы довести до ума и сделать не таким дорогим. Как какой-то специальный девайс со своей прошивкой и не очень дорогим процом... и содержимым.
            Что-то в этом есть)
            • 15 лет назад, # ^ |
                Проголосовать: нравится +3 Проголосовать: не нравится

              ребят, вы вообще о чём? =)

              мы тут вроде бы только задачки решаем... :)