📖

競技プログラミング環境にあれば効率が上がりそうなあれこれ

2023/09/15に公開

始めに

競技プログラミングにおいてよりよいパフォーマンスを上げるにはより多く問題を解くだけでなく、如何に早く問題を解くかも大事な要素となってきます。問題を早く解くには問題への慣れだけでなくコードを早く書く、テストをスムーズに行う、バグを早く見つけることがなどが上げられます。そこで本記事では問題を解くときの効率化を目指すことでコードを早く提出するために欲しい機能を挙げていきます。
ただし一部を除きツールに依存しないように具体的には書いていません。

PCの環境

PC内部においてあらかじめ準備しておくべきものを書いています。

自作ライブラリ

これがあると非常に効率が上がります。普段の精進で関数化、クラス化、構造体の作成などをしておき他の問題でも呼び出しやすいように抽象化しておきましょう。

補完

当たり前ですが、これがないとあるのとでコード書く早さが変わります。
最近はGitHub Copilotなど深層学習を使ったものが流行っているのでLanguage Server Protocolと組合せて使うのが良さそうです。

リンター

コードをある規約に従ったものに直してくれるツールです。読みやすくなることでデバッグが行いやすくなります。

スニペット

簡単なコマンドからコードを呼び出す機能。print("Yes")など汎用性の高い者を登録していると便利です。

デバッガー

プログラム途中の状態を見ることができるようになります。

デバッグ力

デバッガーを使うのにも練習がいるので普段から使用する用にしましょう。
またデバッガーを使わないようなバグとり(添え字確認など)も意識しましょう。

自動化ツール

競技プログラミングを効率化してくれるツールがあるので積極的に使いましょう。以下ではonline-judge-toolsを前提に記述します

前提

フォルダ構成を規則的にしましょう

abcコンテストの271を解く場合はフォルダ名をabc271にしてa.cppというファイルにコードを書いていく。

こうすることで以下のテスト、提出の自動化を行いやすくなります

テスト

サンプルテストの自動化を行います
スクリプトを書き自動化するのが良いと考えます。
クリックで行えるように設定するのも効果的です。

誤差判定

小数点を含む数値が回答である場合のためにスクリプトを用意します。

ランダムテスト

サンプルだけでは通る原因が分からない場合に愚直解を書き生成されたサンプルの答えを作成してテストケースを増やしましょう

提出

こちらもスクリプトを書いたりクリックで行えるように設定しましょう。

グラフ可視化

グラフを見やすくすることで探索時の様子を理解しやすくしましょう。

外部の環境

PC内部だけでなく物理的環境も効率化に役立つはずです

ハイスペPC

Dockerなど仮想環境を使用している場合、コンパイルに時間がかかる環境などであれば非常に恩恵が受けられます。

二つ以上のモニター

問題を表示するモニター、エディターを開くモニターがあれば快適です

打ちやすいキーボード

HHKBなどのキーボードであればコーディングしやすくなるはずです。

ゲーミングチェア

椅子は大事

終わりに

便利な環境のための要素は上記のもの以外にも多くあるはずなのでこんなのがあったよみたいなのがあれば教えていただけると幸いです

以上の要素を盛り込んだもの
https://qiita.com/rokoooouribo/items/76a0057c75694fd943f5

Discussion