とこはるのまとめ

多分考えたことがまとまっているはずです。きっと。おそらく。

競技プログラミング再入門 環境構築編

はじめに

私は競技プログラミングでは、5年くらい前に頑張っていた時期がありましたが、最近は気が向いたらコンテストに出るくらいでした。ところが、さすがにそれだと問題が生じてきました。

  • 昔整備したライブラリは滅茶苦茶なまま。何がどこに行ったかわからない。
  • 最近のエディタについていけていない

そこで色々とリフォームをしようと思い、主にこの土日で頑張りました。今回はそれを記録しておこうと思います。

タイトルにある「再入門」は、今まで惰性で競技プログラミングに関わっていたところを、もう少しまじめに取り組もうという気持ちがあるのでつけました。ぼちぼち頑張っていこうと思います。

以前の環境

  • Cygwin
  • Terapad (デフォルトからタブ幅を変更した程度)

今回の環境

各種設定にあたっては、次の記事を大きく参考にしました。この場で感謝いたします。
Visual Studio Codeで競プロ環境構築 - Qiita

VSCodeの設定

  • 基本
    • ターミナルをgit bashにする
    • g++, python3.6 へのパスを通す
    • tabは2スペース
  • 導入した拡張
    • C/C++
    • clang-format
      • styleは "Google" に設定
      • 雑にコードを書いてもフォーマットしてくれるので便利。
    • cpplint
    • Indentation Level Movement
    • jumpy
  • tasks(tasks.json)の設定
    • デフォルトを 「g++でビルド」と「atcoder-tools test」をつなげたものにする。
    • Ctrl+Shift+B で全部やってくれるので楽
    • g++ビルドパートの詳細
      • -std=c++14
      • -Wall, -Wextraを使いたかったが、"%lld"で怒られるのがうっとうしい
      • 原因である-Wformat以外のWを列挙した
  • snipet (cpp.json)の設定
    • ライブラリを登録
    • フォーマットが特殊なので、変換用のPythonコードを書いた

atcoder-toolsの設定

ライブラリの新調

全部とまではいかないが、ライブラリを書き直した。
多重vectorを楽にできるdump関数をデバッグ用に用意した。

コンテストに出ての感想

コンテストはこれです 全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019 - 全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019 | AtCoder

  • atcoder-toolsは最高
    • REが出たときにprintデバッグできないのが惜しい?
    • サクッとデバッガを使えるようにしろという話な気がする
  • printデバッグばかりをした。dump関数は便利。
  • cpplintちょっとうっとうしいかも
  • 結局Warning全然見なかった
    • ノリで変数をたくさん宣言していたので、UnusedVariableがたくさん出ることは目に見えていたのがあるかも?
    • どう運用していくのがいいかな...
  • snipetも用意した分は全然使わなかった
    • これはまだまだ未完成なので少しずつ拡張していきたい。
  • グラフとか木に対するデバッグ出力が欲しくなった
  • Indentation Level Movement あたりは全然使わなかった。
    • これは意識的に慣れないとどうしようもなさそう

次にやりたいこと

Snipet, ライブラリまわりは改善のやりようがあるからこのあたりをやりたい。
また、結構設定が多くなりそうなので、できる限りgitで管理しようと思う。

今回は特に触れなかったが、考察の粗は何とかしたい。これはAnkiあたりを使ってツールを構築したい。

(追記欄)

  • ハマったところ
    • CygwinVSCodeのターミナルにしようとするとパスがうまく通らない
      • おそらくCygwinのパスがcygdriveからはじまるのに、VSCodeが普通の絶対パスを渡そうとするから変なことになる。
      • そこまで思い入れもないので大人しくGit Bashを使うことにした
    • VSCodeのターミナルは起動時にbash_profileとかを読み込んでくれない
      • ググると"terminal.integrated.shellArgs.windows": ["-l"],すればよいことがわかり解決
    • User Settingsのパス指定で "\\"区切りで書くノリでtasks.jsonのargs欄に同じような書き方をしたらうまく実行できなかった
      • "/"区切りで登録が正解らしい。
      • "shell"タイプのタスクの"args"だからGitBashに渡されるので、ここにはGitBashが受け取れる形で書くということだろうと思う