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

Автор IlyaCk, история, 5 лет назад, По-русски

Под "header-ами&footer-ами" понимаю описанное тут.

Кажется совершенно логичным использовать именно такой подход, в частности (но не только) в ситуациях, когда хотим в задаче на какую-то структуру данных подсовывать программе участника огромные размеры входных данных, но не~тратить время на их реальное считывание из входного файла, а генерировать в части, написанной жюри, согласно указанным в настоящем входном файле размерам и некоторым seed-ам. Это, по-видимому, лучше, чем когда генератор описывается в условии и требуется, чтоб участники сами его реализовали в своей программе (и потому, что наименее опытные участники не~нагружаются мутной и непонятной им работой, и потому, что наиболее опытные участники получают меньше возможностей не~решать задачу по сути, а искать, как обойти эту суть, изучив особенности генератора).

Но есть ли какие-то стандартные приёмы, сформулированные best practices и т.д. в вопросе того, как лучше поступать, чтоб гарантировать одинаковость генераторов в header-ах&footer-ах разных языков программирования? Или, может вдруг, есть выводы и practices, показывающие, что гарантировать надо не~одинаковость данных, а что-то другое? Есть ли, например, какой-то набор реализаций на разных языках программирования генераторов случайных чисел, о которых с достаточной мерой уверенности известно, что они при одинаковых seed-ах дают одинаковые последовательности?

Правильно ли я понимаю, что в подавляющем большинстве таких задач следует ожидать, что Python будет проигрывать по быстродействию плюсам, паскалю и даже джаве значительно сильнее, чем в среднем? Я ещё не пробовал, но, учитывая "Видимо, глобальная область видимости плохо влияет на выполнение программы", "keep namespace clean" и "Python accesses local variables much more efficiently than global variables.", следует ожидать ведь именно этого? Ведь в задачах с header-ами&footer-ами участник может хранить что-то своё между разными запусками его функций только в глобальных переменных? Или я что-то упускаю?

И вообще, кто что скажет?

  • Проголосовать: нравится
  • +22
  • Проголосовать: не нравится

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем IlyaCk (предыдущая версия, новая версия, сравнить).

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится +10 Проголосовать: не нравится

    Ну, я как-то примерно так и представлял... Но вопрос в том, есть ли какие-то известные (но не мне) best practices, или предлагается каждый раз писать всё заново, опираясь только на общие знания, здравый смысл и 2-й том Кнута...

    Даже для ситуации, когда генератор создаёт файл, а не встроен в решение, и написан только на одном языке C++, в testlib.h пришлось много в каких мелочах отступить от стандартных библиотек и применить общие знания несколько особым образом, чтоб обеспечить высокую кроссплатформенность. Когда должно быть одновременно несколько версий генератора на нескольких языках программирования, вроде ведь логично ожидать, что обеспечить одинаковость (по сути, ту же кроссплатформенность) гораздо тяжелее? Неужели этим вопросом до сих пор никто не занимался? Или те, кто занимались, предпочитают не~светить свои наработки?

»
5 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Поставлю вопрос немного иначе: кто что посоветует почитать просто о good practices такого рода генераторов, пусть без привязки именно к header-ам и footer-ам?

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Появились ещё пара вопросов, на который могли бы ответить куда б_о_льшее число людей, т.к. они больше со стороны участника, чем администратора:

  1. Как принято поступать с этими header-ом, основной частью и footer-ом -- склеивать в один файл и копировать нужное при каждой попытке сдачи в проверяющую систему, или пытаться как-то использовать средства языка/среды для работы с многофайловыми проектами? А то что-то я не~могу представить себе ни~адекватного решения для сразу нескольких языков программирования, ни~даже удобных решений для отдельных языков. Там ведь в ejudge происходят (склейка) и (компиляция одного файла), а не (каноническая сборка многофайлового проекта)? И как это скрестить с тем, чтоб работали средства IDE, хотя бы autocomplete? (Например, для C++ пробовал вариант "повключать #include-ами", но средства IDE не~работают.)

  2. Где и по каким ключевым словам искать хоть что-то по этой теме, хотя бы ориентированное на участников? (В идеале хотелось бы и доки для участников, и доки для авторов задач, и доки для админов еджаджа.)