Оптимален ли ваш сетап для спортивного программирования? Кликни и узнай!

Правка ru16, от Wandoka, 2024-09-10 10:19:48

В этом блоге я сделал тест, который поможет вам определить, оптимален ли ваш сетап или нет. Ниже я напишу список критериев, по которым я буду его оценивать и разбаловку. И в конце вы сможете узнать, к какой "группе людей" вы относитесь, прямо как в тестиках на персонажа из аниме в Вконтакте.

Я сюда включил практически всё что мне пришло в голову, если я что-то забыл, предложите в комментариях. Но добавлять вещи как У меня есть интернет и На моей клавиатуре есть большая часть клавиш я не буду :)

Это несерьёзный блог, но если вы новичок, вы может быть найдёте для себя что-то новое. Но это всё равно никак не поможет вам поднять рейтинг, для этого нужно решать задачи.

Вы можете компилировать код перед посылкой

  • $$$0$$$ баллов: Я не знаю как компилировать код самостоятельно и просто отправляю его на проверку
  • $$$10$$$ баллов: Я умею запускать код до отправки

Я видел много школьников, которые отправляю посылки никогда не запуская. Даже в институте такие встречались. На последнем див 4 соревновании 73 страницы Compilation Error Кажется таких людей даже больше, чем я ожидал)

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

Ваша среда работает стабильно и без лагов

  • $$$0$$$ баллов: Моя среда постоянно падает и зависает
  • $$$2$$$ баллов: Моя среда иногда глючит и даже иногда падает.
  • $$$4$$$ баллов: Моя среда работает отлично и никогда не глючит

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

Вы можете запускать свой код без интернета

  • $$$0$$$ баллов: Я пользуюсь онлайн редактором и при падении интернета не могу запускать свой код
  • $$$2$$$ баллов: Всё установлено на моём компьютере, и отсутствие интернета никак не повлияет на то, могу ли я запускать свой код

Существуют такие онлайн компиляторы, которыми я совсем не рекомендую пользоваться. Зависеть от посторонних сайтов или от интернет провайдера — странная проблема, её лучше избегать

Вам может быть полезна подсветка синтаксиса и вы ей пользуетесь

  • $$$0$$$ баллов: Я не использую подстветку синтаксиса, но если бы я знал как её включить, я бы пользовался
  • $$$2$$$ балла: Я использую подстветку синтаксиса
  • $$$2$$$ балла: Я не использую подстветку синтаксиса, хотя знаю как её включить.

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

Вы можете проверить сколько секунд работала ваша программа

  • $$$0$$$ баллов: Я не могу проверить, сколько секунд работала моя программа
  • $$$1$$$ баллов: Я могу проверить, сколько секунд работала моя программа, и мне для этого не нужно писать ничего нового в коде

Полагаться на то, что если на вашем компьютере работает решение < 1 секунды, то на проверяющих серверах произойдёт то же самое — нельзя. Но иметь возможность сравнить, быстрее ли работает ваше решение или нет после какого-нибудь фикса — бывает очень полезно.

Вы можете проверить, сколько памяти потребила ваша программа

  • $$$0$$$ баллов: Я не могу проверить, сколько мегабайт использовала моя программа
  • $$$1$$$ points: Я легко могу проверить, сколько мегабайт использовала моя программа

Иногда сложно точно сказать, сколько памяти потребляет ваша программа на макс тесте, и бывает удобно запустить её самому и проверить это, а не тратить лишнюю одну посылку

Вам подсвечиваются ошибки во время написания кода (другими словами, вы используете Language Server)

  • $$$0$$$ баллов: Когда я допускаю ошибку в синтакисе, я это вижу только после компиляции/запуска программы
  • $$$3$$$ балла: Когда я допускаю описку в коде, то это место подствечивается, чтобы я сразу мог это исправить.

Если у вас не включено подсвечивание ошибок на ходу, то тогда вам нужно перезапускать код несколько раз, чтобы исправить такие ошибки как vctor<int> A;. Это тратит лишнее время

Ваш язык программирования легко решает все те задачи, до которых вы доходите в контесте

  • $$$0$$$ баллов: Случалось, что я не смог решить задачи, и это произошло исключительно из-за языка программирования, который я выбрал
  • $$$3$$$ балла: Мой язык программирования никогда не был причиной моего неуспеха

У некоторых задач слишком жёсткий тайм лимит, чтобы заливать её на медленных языках. Иногда это всё-таки можно сделать, но нужно приложить дополнительные усилия. Я не буду называть какие же языки нужно относить к "проблемным" — у меня нет такой компетенции, но если вы когда-нибудь сталкивались с похожими проблемами, вероятно вы неоптимальны.

Вы можете быстро копировать к себе готовые алгоритмы/структуры данных

  • $$$0$$$ баллов: Я никогда не копирую код и пишу всё руками / Я постоянно копирую код, который нахожу в интернете
  • $$$2$$$ балла: У меня есть своя библиотека с алгоритмами/структурами данных, если мне что-то нужно, я ищу нужный алгоритм в ней и копирую его себе в код.
  • $$$3$$$ балла: У меня есть своя библиотека и я могу горячими клавишами (сниппетами?) легко вставлять из неё в мой код, не покидая моего текстового редактора

Писать дерево отрезков руками 3 раза за контест — точно плохая идея. Скопировать его даже 1 раз всегда быстрее. Особенно если вы можете это сделать, не выходя из своего редактора. Часто приходится в алгоритмах что-то поменять, поэтому лучше пользоваться своей библиотекой, чтобы на 100% понимать как всё работает, и если что быстро менять.

Вам не нужно копировать и вставлять тест каждый раз при запуске программы

  • $$$0$$$ баллов: Каждый раз, когда я запускаю мой код, мне приходится скопировать тест из задачи и вставить его
  • $$$2$$$ балла: Мой сетап позволяет запускать один и тот же тест несколько раз, не копируя его каждый раз.
  • $$$3$$$ балла: Я могу вставить несколько тестов сразу, и по нажатию 1 кнопки запускать моё решение на всех из них

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

У вас удобное сообщения о ворнингах/ошибках

  • $$$0$$$ баллов: Ворнинги/ошибки которые я вижу после компиляции мне не понятны и никогда мне не помогают
  • $$$1$$$ балл: Ворнинги/ошибки которые я вижу мне иногда помогают, но я знаю что они могут быть лучше
  • $$$2$$$ балла: Ворнинги/ошибки которые я вижу мне всегда помогают что конкретно не так с моим кодом

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

Использование авто-парсера контестов

  • $$$0$$$ баллов: Мне приходится копировать тесты из задач руками
  • $$$1$$$ балл: Я использую парсеры контестов, которые автоматически копируют тесты с контеста

Есть удобные тулы которые позволяют копировать тесты из контестов, очень удобно.

Ваш код легко прочитать, и как следствие легче взломать

  • $$$0$$$ баллов: У меня большой темплейт (>50 строк), который делает мой код непонятным
  • $$$1$$$ балл: У меня нет темплейта / он <= 50 строчек / он > 50 строчек, но я уверен что он не мешает читаемости кода.

Из-за того, что на кодфосес всё ещё есть взломы, лучше делать код понятнее. Так как всегда лучше, если вас взломают на контесте и вы исправите ошибку, чем если вы упадёте на системных тестах. (Ну, кроме анти-хэш тестов и прочего)

У вас есть возможность запустить дебаггер (так чтобы вам было удобно им пользоваться).

  • $$$0$$$ баллов: У меня нет возможности запустить дебаггер / есть возможность, но им очень неудобно пользоваться
  • $$$1$$$ балл: Если я захочу, я могу запустить удобный дебаггер, просто предпочитаю им никогда не пользоваться
  • $$$1$$$ балл: Если я захочу, я могу запустить удобный дебаггер, и пользуюсь этим

Даже если вы не используете дебаггер, иметь возможность запустить его — точно плюс. Принтить в консольку не всегда быстрее.

Использование функций для принта в консоль для дебага

  • $$$0$$$ баллов: Я использую стандартный cout или print для дебага.
  • $$$1$$$ балл: Я использую продвинутые способы принтов для дебага, например использую макросы чтобы выводить название переменных вместе с их значением, могу легко вывести содержимое массива одной строкой.
  • $$$3$$$ points: I have a complete debugging library, that is able to output graphs/data structures in an easily readable form

У вас настроен удобный способ для стресс-тестирования

  • $$$0$$$ баллов: Я не использую стресс тестирования и у меня нет сетапа чтобы это делать.
  • $$$2$$$ балла: Мой шаблон позволяет сделан так, чтобы я мог стресс тестировать свои решения
  • $$$3$$$ балла: У меня есть скрипт, который позволяет мне стресс тестировать мои решения.

Если вы не слышали про стресс тестирование, то вы получаете 0 очков за этот пункт, но также вам стоит посмотреть это крутое видео, которое хорошо про это рассказывает .

Вы используете vim motions/ или другие продвинутые горячие клавиши для редактирования текста.

  • $$$0$$$ баллов: Я не использую vim motions или другие похожие продвинутые горячие клавиши для редактирования текста
  • $$$2$$$ балл: Я использую vim motions или другие похожие продвинутые горячие клавиши для редактирования текста.

Выделять тексты мышкой — точно не оптимально. Если вы убираете постоянно руки с клавиатуры, или вы перемещаетесь по тексту стрелочками, знайте что есть способ лучше, vim motions очень вас ускорит.

WPM при печатаньи (Слов в минуту).

  • $$$0$$$ баллов: У меня < 30 WPM
  • $$$1$$$ point: У меня >= 30 WPM
  • $$$2$$$ point: У меня >= 100 WPM

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

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

Использование нескольких файлов для кода

  • $$$0$$$ баллов: Я использую 1 файл, там я пишу все мои решения. Если мне нужно писать 2 решения параллельно, я сохраняю одно из них в блокнотике.
  • $$$1$$$ балла: Я могу писать код в нескольких окнах параллельно.

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

Использование класса для модульной арифметики

  • $$$0$$$ баллов: Я не использую специальных классов для модульной арифметики и мой код выглядит примерно так d = ((a+b)%mod - c + mod)%mod * e % mod
  • $$$1$$$ балл: Я использую специальный класс для модульной арифметики и мой код выглядит примерно так d = (a+b-c)*e

Сравнение результатов работы тестов и правильных ответов

  • $$$0$$$ баллов: Когда я запускаю тесты, я вручную проверяю совпадают ли они с ответами или нет.
  • $$$1$$$ балла: Когда результат теста не совпадает с ожидаемым, в моём интерфейсе это подсвечивается

Когда в самплах большие тесты, сравнивать их вручную с правильными ответами похоже на игру "найди 5 отличий на картинке". Лучше автоматизировать этот процесс.

Считаем баллы

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

  • 47-50) Либо у вас $$$\color{orange}{2300}+$$$ рейтинга и вы используете крутой удобный сетап, либо вы ~ $$$\color{green}{1200}$$$ и тратите слишком много времени на оптимизирование вашей среды, когда на самом деле вам просто нужно решать задачи
  • 36-46) У вас неплохой сетап, бабушки называют вас "хакером".
  • 20-36) В вашем сетапе есть проблемы, либо вы слишком близко к сердцу восприняли фразу "чтобы решать задачи, нужно просто решать задачи", либо вы панк $$$\color{black}{L}\color{red}{GM}$$$ которому без разницы, что использовать, чтобы выиграть контест.
  • 13-19) Вы олимпиадный математик, и вы сидите на кодфорсес только потому что математические олимпиады намного случнее в онлайн формате.
  • 0-12) Вы должны быть счастливее чем остальные группы в этом списке, так как у вас реально есть способ повысить свой рейтинг решая задачи по программированию, потому что ваш сетап сравним с написанием контеста с кнопочного Нокиа.

Кстати я веду занятия по программированию, $$${1900}$$$ руб в час за индивидуальные, $$${600}$$$ рублей за групповые занятия (группы из 3х человек), бесплатное первое занятие. Напишите мне на Codeforces если заинтересованы.

Теги тест на характер, сетап, безудержное веселье

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en41 Английский Wandoka 2024-09-11 15:45:13 0 (published)
en40 Английский Wandoka 2024-09-11 15:43:43 97 (saved to drafts)
ru23 Русский Wandoka 2024-09-11 10:12:24 0 (опубликовано)
en39 Английский Wandoka 2024-09-11 10:11:52 0 (published)
ru22 Русский Wandoka 2024-09-11 10:10:03 38
en38 Английский Wandoka 2024-09-11 10:09:38 38
en37 Английский Wandoka 2024-09-11 10:04:14 19 Tiny change: ' 4 contest](https://' -> ' 4 contest on problem A alone](https://'
en36 Английский Wandoka 2024-09-10 17:37:26 331
ru21 Русский Wandoka 2024-09-10 17:36:34 54
ru20 Русский Wandoka 2024-09-10 17:34:13 90
en35 Английский Wandoka 2024-09-10 10:29:23 2 Tiny change: '\n- **20-36)** You ar' -> '\n- **20-35)** You ar'
ru19 Русский Wandoka 2024-09-10 10:29:09 2 Мелкая правка: '\n- **20-36)** В ваше' -> '\n- **20-35)** В ваше'
en34 Английский Wandoka 2024-09-10 10:27:13 5
ru18 Русский Wandoka 2024-09-10 10:25:53 198
ru17 Русский Wandoka 2024-09-10 10:23:43 13
ru16 Русский Wandoka 2024-09-10 10:19:48 9
ru15 Русский Wandoka 2024-09-10 10:16:41 5
ru14 Русский Wandoka 2024-09-10 10:13:38 22
ru13 Русский Wandoka 2024-09-10 10:08:04 2 Мелкая правка: 'вые занятие (группы и' -> 'вые занятия (группы и'
ru12 Русский Wandoka 2024-09-10 10:05:47 1880
ru11 Русский Wandoka 2024-09-10 09:59:25 1787
ru10 Русский Wandoka 2024-09-10 09:48:27 2015
en33 Английский Wandoka 2024-09-10 09:41:49 830
ru9 Русский Wandoka 2024-09-10 09:37:40 1852
ru8 Русский Wandoka 2024-09-10 09:25:46 2132
en32 Английский Wandoka 2024-09-10 09:16:05 233
ru7 Русский Wandoka 2024-09-10 09:15:26 4741
en31 Английский Wandoka 2024-09-10 09:02:35 136
ru6 Русский Wandoka 2024-09-10 08:59:30 5802
ru5 Русский Wandoka 2024-09-09 19:53:04 852
ru4 Русский Wandoka 2024-09-09 19:46:54 3 Мелкая правка: ' из аниме из Вконтакте.' -> ' из аниме вВконтакте.'
ru3 Русский Wandoka 2024-09-09 19:46:36 190
ru2 Русский Wandoka 2024-09-09 18:58:52 1664
ru1 Русский Wandoka 2024-09-09 18:51:56 12955 Первая редакция перевода на Русский (сохранено в черновиках)
en30 Английский Wandoka 2024-09-09 18:50:07 199
en29 Английский Wandoka 2024-09-09 18:46:41 100
en28 Английский Wandoka 2024-09-09 18:45:28 3 Tiny change: 'ou to $100%$ accuratel' -> 'ou to $100$ % accuratel'
en27 Английский Wandoka 2024-09-09 18:44:59 5
en26 Английский Wandoka 2024-09-09 18:42:39 3 Tiny change: 'r you are $\color{green}{~1200}$ and' -> 'r you are ~ $\color{green}{1200}$ and'
en25 Английский Wandoka 2024-09-09 18:42:18 7
en24 Английский Wandoka 2024-09-09 18:41:56 5 Tiny change: 'or{green}{~1200}$ and wasti' -> 'or{green}{1200}$ ish and wasti'
en23 Английский Wandoka 2024-09-09 18:41:32 2 Tiny change: 'r you are ~$/color{green}{1200}$ and' -> 'r you are $/color{green}{~1200}$ and'
en22 Английский Wandoka 2024-09-09 18:40:30 165
en21 Английский Wandoka 2024-09-09 18:32:20 1 Tiny change: 'ng each on of them. ' -> 'ng each one of them. '
en20 Английский Wandoka 2024-09-09 18:31:41 19 Tiny change: 'one.\n\n\n\n\n' -> 'one.\n\n\n###Shameless plug\n\n\n'
en19 Английский Wandoka 2024-09-09 18:30:24 29
en18 Английский Wandoka 2024-09-09 18:28:42 986
en17 Английский Wandoka 2024-09-09 18:08:10 7792
en16 Английский Wandoka 2024-09-09 17:37:27 3121
en15 Английский Wandoka 2024-09-09 17:07:43 19 Tiny change: 't.\n\nYou HAVE TO able to r' -> 't.\n\nYou **have to** be able to r'
en14 Английский Wandoka 2024-09-09 17:07:08 20 Tiny change: ': I don't compile my code b' -> ': I don't know how to run my code b'
en13 Английский Wandoka 2024-09-09 17:05:47 236
en12 Английский Wandoka 2024-09-09 17:03:22 189
en11 Английский Wandoka 2024-09-09 17:01:57 4
en10 Английский Wandoka 2024-09-09 17:01:08 1467
en9 Английский Wandoka 2024-09-09 16:45:29 8
en8 Английский Wandoka 2024-09-09 16:45:03 655
en7 Английский Wandoka 2024-09-09 16:37:59 229
en6 Английский Wandoka 2024-09-07 18:58:40 34 Tiny change: 'g yet.\n\nYou HA' -> 'g yet.\n\n[vote] kekking\n\nYou HA'
en5 Английский Wandoka 2024-09-07 18:45:05 784
en4 Английский Wandoka 2024-09-06 21:27:05 4 Tiny change: 'point.\n\n\n\n \n\n\' -> 'point.\n\n \n\n\'
en3 Английский Wandoka 2024-09-06 21:21:32 1245
en2 Английский Wandoka 2024-09-06 21:11:44 3844
en1 Английский Wandoka 2024-09-06 20:38:15 3975 Initial revision (saved to drafts)