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

Правка ru6, от Wandoka, 2024-09-10 08:59:30

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

You are using a programming language, that can solve all of the problems in the contest you attempt

  • $$$0$$$ points: I attempted a problem in the past and failed because of my choice of programming language
  • $$$3$$$ points: The programming language I use has never failed me.

Some tasks are impossible to solve using slower languages. Sometimes it is possible to solve a task, but you have to put in extra effort to do so. I am not an expert here, so I won't list "unviable languages". But if you run into this kind of issues, I think you also understand that what you are doing is suboptimal

You have a fast way to copy and paste algorithms/data structures

  • $$$0$$$ points: I never copypaste anything / Usually I copy algorithms from the internet
  • $$$2$$$ points: I have my own library of algorithms/data structures and when I need something, I search in it and copypaste to my code
  • $$$3$$$ points: I have my own library and I have hotkeys (snippets-like) to easily paste needed algorithms into my code without leaving my editor

If you are finding yourself implementing the same Add on a segment, sun on a segment Segment tree algorithm 3 times in a row, you are probably becoming faster and faster at implementing it. In a certain sense, it is optimal in terms of learning. But it always be slower than just copying and pasting it.

You don't have to copy and paste your tests every time you run your program.

  • $$$0$$$ points: When I run my program, I have to paste the text in the console every time I run the program
  • $$$1$$$ point: I am able to paste 1 test once and run it multiple times
  • $$$2$$$ points: I am able to paste several tests at once and run all of them with a push of 1 button, but I cannot paste tests in the console if I want to
  • $$$3$$$ points: I am able to paste several tests at once and run all of them with a push of 1 button, and if I want to I can paste the tests in the console.

If you have to copy the same tests over and over again to test your solution, you are doing something very wrong: it wastes a lot of time. Also sometimes it is important to be able to input data line by line (when solving interactive problems for example), that is why there is a difference between $$$2$$$ and $$$3$$$ points

You have good warnings/error messages.

  • $$$0$$$ points: My warning/error messages are confusing and they don't help me at all
  • $$$1$$$ points: My warning/error messages are mostly useful, but sometimes I wish they were better
  • $$$2$$$ points: My warning/error messages are always telling me what is wrong with my program, and I don't see a way how to make it better

I use C++ and I have spent some time on adding compilation flags that enable some new warnings. I was not able to get all of the sanitizers working properly, but even the warning messages became a lot more useful. There is a cool blog on this topic.

Auto-parcing contests to copy tests.

  • $$$0$$$ points: I copy sample tests from the tasks manually
  • $$$1$$$ point: I use tools to automatically copy tests from problems

There are tools like this one that allow you to copy tests from the tasks.

Your code is readable and hackable.

  • $$$0$$$ points: I have a > 50 lines template that makes it harder to read my code
  • $$$1$$$ point: I don't use a template / my template is <= 50 lines of code / it is > 50 but I am sure it does not prevent anyone from easily understanding my code

Hacks exist, it is always better to get hacked (unless it is some anti-hash hack) than to FST

You can run a debugger (in a form that is easy to use).

  • $$$0$$$ points: I cannot run a debugger in a form that is easy to use for me
  • $$$1$$$ point: I can run a debugger in a form that is easy to use for me, but I prefer not to use it
  • $$$1$$$ point: I can run a debugger in a form that is easy to use for me and I use it

Even if you are not usually using a debugger, the option to be able to is definitely a plus. Printing is not always faster.

You have a good way to print() to debug

  • $$$0$$$ points: I use plain cout or print to debug.
  • $$$1$$$ points: I use advanced debug printing: like using macros to output the names of the variables with their values, being able to easily output the array.
  • $$$3$$$ points: I have a complete debugging library, that is able to output graphs/data structures in an easily readable form

You have a stress testing setup.

  • $$$0$$$ points: I don't use stress testing or I have no setup to use it.
  • $$$2$$$ points: I have a template that helps me to stress test my solutions
  • $$$4$$$ points: I have a script that is able to stress my solutions.

If you don't know about stress testing, you get 0 points and you should also check out this cool video that explains it.

You are using vim motions/ other advanced text editor key bindings.

  • $$$0$$$ points: I don't use vim motions or any other advanced text editor key bindings
  • $$$2$$$ points: I use vim motions or other advanced text editor key bindings.

Repeatedly grabbing your mouse to select text is definitely suboptimal. Using arrow keys to traverse through code is very slow. Using things like vim motions will speed things up a lot

WPM while typing.

  • $$$0$$$ points: I have < 30 WPM while typing
  • $$$1$$$ point: I have >= 30 WPM while typing
  • $$$2$$$ point: I have >= 100 WPM while typing

You can check your typing speed here. I know typing steep is not really a setup, but it is close enough to include in this blog.

I don't think it really matters, except for the edge cases. Being too slow can hurt your performance, and also being very fast can get you a lot of rating in a speedforces situation.

You can easily use multiple files to code

  • $$$0$$$ points: I use a single file to code, if I want to write something in parallel, I copy the old solution to the notepad
  • $$$1$$$ point: My setup allows me to code in several windows.

Sometimes you want to jump to another problem while not finishing the current one. If you have to copy your code somewhere before you start coding a new problem, it is some extra time spent on managing something that can be made easier.

You are using a class for modular operations

  • $$$0$$$ points: I don't use special classes for modular operations and my code looks like this d = ((a+b)%mod - c + mod)%mod * e % mod
  • $$$1$$$ point: I use a special class for modular operations and my code looks like this d = (a+b-c)*e

Counting points

Now it is time to sum up all of your points! In the list below you can see what kind of coder you are.

  • 46-50) You are either $$$\color{orange}{2300}+$$$ and have a cool optimal setup, or you are ~ $$$\color{green}{1200}$$$ and wasting too much time on optimizing your setup instead of focusing on solving problems
  • 36-45) You have a pretty good setup, old ladies who have no clue about how computers work think that you are a "hacker"
  • 20-36) You are writing in a suboptimal environment, either because you are a bit too hardcore about "to be better at solving problems I have to solve problems", or because you are a punk $$$\color{black}{L}\color{red}{GM}$$$ that is too cool to care about what tools to use while destroying competitors.
  • 13-19) You are a math enthusiast that decided to join codeforces because online math olympiads are not that fun.
  • 0-12) You should be the happiest if you got this amount of points. It means you can improve your rating aside from just solving more problems, because it is almost like you are participating from your Nokia phone.

Also I give online classes, $$${\$25}$$$ per hour for one on one lessons, $$${\$8}$$$ per hour for lessons in groups of 3, free trial lesson. Contact me on Codeforces if you are interested or for more info.

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

История

 
 
 
 
Правки
 
 
  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)