0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OSX上にVSCodeを使ったAtcoder環境を構築する

Posted at

忙しい人向けのまとめ

  • VSCodeのキーボードショートカットで問題のDL,ビルド,検証をやります(提出は手動でやりたい流派なので今回はやりません)
    • https://github.com/kmyk/online-judge-tools を使用
    • 「.cppのコンパイル 〜 上記ツールを使用して問題のDL 〜 実行」をShellで自動化
    • VSCodeのタスクに作成したShellを指定
    • キーボードショートカットを設定

フォルダ構成

以下最終的なフォルダ構成です。参考までに

pwd
/Users/xxx/Atcoder

tree -L 1                                                                                                          
.
├── AlgorithmTemplate  アルゴリズムのテンプレートをここに配置
├── Atcoder.code-workspace VSCodeの設定ファイル
├── Contest        コンテストフォルダをこの中に作成する
├── README.md
├── TeplateFolder     
├── cpp_dl_test.sh       task.jsonsに登録するshell
├── cpp_onecase_only.sh  task.jsonsに登録するshell
└── cpp_testonly.sh      task.jsonsに登録するshell

はじめに

各種ツールのインストール

VSCodeのインストール

https://code.visualstudio.com/
上記ページから、「Download for Mac」でインストール。細かい設定はもう覚えてないですが、特に意識することはなかった記憶です。

GCCのインストール

OSXにデフォルトで入っているC++コンパイラはClang系(/usr/bin/g++)ですが、これが意外と使いづらいのでGCCにします。
インストールは以下の記事を参考にさせていただきました。
https://qiita.com/EngTks/items/ffa2a7b4d264e7a052c6

大まかな作業は以下

  • HomebrewによるGCCのインストール
  • シンボリックリンク張り替え
  • #include を使えるようにする

online-judge-toolsのインストール

Atcoderのコンテストサイトからサンプル問題を取得して、それぞれをテストするという夢のようなツールが以下リポジトリで公開されていたのでありがたく使用させていただくことにしました。
インストール方法は「How to install」に記載があるので割愛

kmyk/online-judge-tools:
https://github.com/kmyk/online-judge-tools

なんと日本語リファレンスもあります。環境を作る上で参考にさせていただきました。
Introduction to online-judge-tools (Japanese) — online-judge-tools documentation
https://online-judge-tools.readthedocs.io/en/master/introduction.ja.html

環境構築

上記の環境を構築した時点で以下の作業はコマンド一発で可能です。

  • 作成した.cppファイルをコンパイルするg++ -g -o $実行ファイル名 $コンパイル対象.cpp

  • Atcoderからコンテストのサンプル問題をDLするoj dl $コンテストの問題ページURL(ex: https://atcoder.jp/contests/abcxxx/tasks/abcxxx_y)

  • 実行ファイルを指定して、DLしたサンプル問題に対して検証を行うoj t -c $実行ファイルのパス

が、正直コーディング中に余計なShellコマンドを打つのは面倒だと思ったので、VSCodeのキーボードショートカットに登録することにしました。

コンパイル-テストまでを行うShellの作成

以下のようなShellスクリプトを作成しました。これだと毎回oj dl コマンドを呼ぶので、別途コンパイルと検証だけを行うshellも作成しておきます。

cpp_dl_test.sh

# !/bin/sh
file=$1
# 引数を受け取りファイル名を抽出
fname=$(basename $file)
objfile=`echo $fname | sed 's/\.[^\.]*$//'`
# ディレクトリに移動
cd $(dirname $file)

echo "テストケースURLを記載"
read str 

g++ -g -o $objfile $file

rm -r ./test
oj dl $str

oj t --jobs 3 -c "./"$objfile 

加えて、ojコマンドで対応していない、実行ファイルに対して1ケースだけテストするshellを作成します。

cpp_onecase_only.sh

# !/bin/sh
file=$1
# 引数を受け取りファイル名を抽出
fname=$(basename $file)
objfile=`echo $fname | sed 's/\.[^\.]*$//'`
# ディレクトリに移動
cd $(dirname $file)

g++ -g -o x $file

echo "in:"
cat ./test/sample-1.in
echo ""
echo "out:"
cat ./test/sample-1.in | ./x

VSCodeタスクに作成したShellを指定

あとは以下のようにtasks.jsonに作成したshellを記載することで、VSCodeのタスクからshellスクリプトを呼び出せるようになります。

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "showOutput": "always",
            "label": "atcr test",
            "type": "shell",
            "args": ["${file}"],
            "command": "/Users/xxx/Atcoder/cpp_testonly.sh",
            "problemMatcher":[]
        },
        {
            "showOutput": "always",
            "label": "atcr dl test",
            "type": "shell",
            "args": ["${file}"],
            "command": "/Users/xxx/Atcoder/cpp_dl_test.sh",
            "problemMatcher":[]
        },
        {
            "showOutput": "always",
            "label": "atcr only one",
            "type": "shell",
            "args": ["${file}"],
            "command": "/Users/xxx/Atcoder/cpp_onecase_only.sh",
            "problemMatcher":[]
        }
    ]
}

VSCodeのショートカットにタスクを登録

VSCodeの以下の画面でキーボードショートカットが設定できるので、ここでタスクの実行をショートカットに登録しておくと楽。

image.png

最後に

これでコーディングに集中できるようになるので、コンテストだけでなく精進も捗ります。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?