競技プログラミング環境の構築 - nop7/problems GitHub Wiki

ここではWindowsでの一般的な競技プログラミング環境を整えます。 TopCoderでSRMに挑戦する際に、必要なプラグインがありますので、それも紹介します。 エディタはそれぞれ好みがあるかもしれませんが、ここではvimを紹介します。

cygwinの導入

linux環境があると何かと便利です。 https://www.cygwin.com/ からsetup.exeを入手してcygwinをインストールしましょう。
Cコンパイラ(g++)とgitも忘れず入れましょう。

vimの導入

僕がvimを使うのでvimの入手方法も書いておきます。
http://www.kaoriya.net/software/vim/ からダウンロードします。
環境変数を設定し、cygwinからvimが使えるようにしておきましょう。

  • cygwin/home/[ユーザ名] の.bash_profileの最後に以下の一行を追加
    • PATH=[パス]:$PATH
    • パスの部分は自分のvimがあるフォルダを指定する(例 /cygdrive/c/vim)

vimのお役立ちプラグインを入れる

NeoBundle

NeoBundleはVimのプラグイン管理を便利にしてくれるツールです。 最初に入れておきましょう。 cygwinから以下のコマンドを入力します。

mkdir -p ~/.vim/bundle
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

これでNeoBundleのインストールは完了です。 次に設定をしていきます。

同階層(cygwinのhome下)に_vimrcというファイルを作成し、中に以下を追記します。

"---------------------------
" Start Neobundle Settings.
"---------------------------
" bundleで管理するディレクトリを指定
set runtimepath+=~/.vim/bundle/neobundle.vim/
 
" Required:
call neobundle#begin(expand('~/.vim/bundle/'))
 
" neobundle自体をneobundleで管理
NeoBundleFetch 'Shougo/neobundle.vim'

" [プラグイン]追加"
NeoBundle 'Shougo/neocomplete.vim' " 補完     

call neobundle#end()

" Required:
filetype plugin indent on

" 未インストールのプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
" 毎回聞かれると邪魔な場合もあるので、この設定は任意です。
NeoBundleCheck

"-------------------------
" End Neobundle Settings.
"-------------------------

[プラグイン追加]の部分にどんどん追記していきます。 ・・が、追加が面倒な場合は nop7のgit内の problems/settings/ogura01/_vimrc をそのままコピペすればOKです。 ogura01/_vimrcを使う場合は、「vimfile/bundle」の部分を「.vim/bundle」に変更してコピペしてください。

vimをcygwinからgvimコマンドなどで再起動すると、プラグインのインストールが始まります。

ちなみに、これらの_vimrcの設定は、cygwinからvimを起動した時だけ有効になります。 エクスプローラからgVimを使う場合は適用されません。その場合も適用したい人は、c:/users/[自分のアカウント]以下に_vimrcと.vimをコピーしましょう。_vimrcの設定をSyncしないといけないので少しめんどくさいです・・。(これ解決策あるんですかね)

以下プラグインはすべてneobundleからインストールすると便利です。

neocomplete

記述自動補完です。書いてる途中でIMEのように候補を出してくれます。 VSのインテリセンスより軽くて早いのでおすすめです。

カラースキームの設定

なぜか? _vimrcではカラースキームだけ設定が反映されてくれません。(原因分かる人いたら教えて下さい) これはgvimがインストールされているフォルダにあるgvimrcを直接編集します。

まずcolorschemeのhybridをダウンロードします。 cygwinで以下のコマンドを入力します。 git clone https://github.com/w0ng/vim-hybrid coloneしたものの中から vim-hybrid/colors/hybrid.vimをコピーして、gVimのvim74/colorsフォルダにペーストします。

gvimrcのこの部分を

"---------------------------------------------------------------------------
" カラー設定:
"colorscheme morning
"---------------------------------------------------------------------------

以下のように変更すると、かっこいい感じになります。

"---------------------------------------------------------------------------
" カラー設定:
"colorscheme morning
" 透明度の設定
autocmd guienter * set transparency=245
colorscheme hybrid
if $TERM == "xterm"
set shell=bash
endif
set t_Co=256
"---------------------------------------------------------------------------

SRM用プラグインの導入

(超参考:TopCoderでCodeProcessor+TZTester+FileEdit) 以下の3つのプラグインがあると便利です。

  • TZTester.jar
  • FileEdit.jar
  • CodeProcessor.jar

TopCoderのArgorithm Competition Supportからダウンロードします。
Competition Arenaの「Options → Editor」で「Editor Preferences」を開きます。

Common ClassPathにBrowseボタンでTZTester.jar, FileEdit.jarの両方を追加します。(両方を;区切りで追加してくれます)

Addボタンを押して以下のように入力してOKを押します。

Name: CodeProcessor
EntryPoint: codeprocessor.EntryPoint
ClassPath: CodeProcessor.jarのパス

CodeProcessorを選択し、Configureを押して「CodeProcessor Configuration」を開きます。

「Editor EntryPoint」に「fileedit.EntryPoint」と入力してConfigureを押します。

「General」タブで「Enter directory to read/write problems to」にソースを置きたいディレクトリを記入します。 cygwinを使っているなら、「C:\cygwin64\home[ユーザ名]\topcoder」とか。

「Code Template」タブでTZTester用にTemplateを編集する。例えばC++ならば

$BEGINCUT$
$ENDCUT$
#include <sstream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
#include <utility>
#include <set>
#include <cctype>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cmath>

#define REP(i,p,n) for(int i=p;i<n;++i)
#define rep(i,n) REP(i,0,n)

using namespace std;
class $CLASSNAME$ {
    public:
    $RC$ $METHODNAME$($METHODPARMS$)
    {

    }
    $TESTCODE$
};
// BEGIN CUT HERE
int main() {
$CLASSNAME$ ___test;
___test.run_test(-1);
}
// END CUT HERE 

とかするとコーディングの時楽です! 「// {BEGIN|END} CUT HERE」で囲まれる部分はFileEditがSubmit時に削除してくれます。

Saveボタンを押したら今度は「Processor Class」に「tangentz.TZTester」と記入して「Verify」を押します。3つのメソッドについて「found」と出たらOK。 だめだったらCompetition Arenaを再起動してからチェック。 (だめだった場合は「CodeProcessor Configuration」の一部を設定しなおさないといけません・・。)

「Editor Preferences」の画面で、先ほど追加したCodeProcessorの設定の「Default」と「At Startup」にチェックを入れます。

Arenaの設定

ついでにArenaの設定もしましょう。 Arenaの「Options」から「Setup User Preferences」をクリック。 「Editors」タブの「Default Language」を設定します。 (ここでC++でないと、先ほど入れたTZTesterは機能しません!他の言語の人はテストがちょっとめんどいというデメリットがありますが、他のプラグインを入れることで解決できるらしいです。)

「Problems/Messages」のフォントサイズを軒並み18くらいにします。 デフォルトだと最近のPCでは解像度が高すぎて全く読めません。最悪の状況でのコンペティションスタートは避けましょう。 Save→Closeで設定は完了です。お疲れ様でした。

使い方

新しい問題を開くとDefault Languageに基づいてファイルが設定したディレクトリに、問題名で勝手に作成されます。 外部ファイルを編集・保存してからCompetition ArenaのほうでCompileを押すと自動的にソースが読み込まれてコンパイルされます。

cygwinターミナル上では、以下のように見えます。 最初、何もなかった場所に・・

XXXXX-PC ~/topcoder
$ ls
ArenaPlugin

問題を開くとcppファイルが生成されます。(FileEdit+CodeProcessorのおかげ)

$ ls
ArenaPlugin  RunningAroundPark.cpp

問題ができた!コンパイルして、そのまま実行(a.exeの実行)すると・・

$ g++ RunningAroundPark.cpp && ./a.exe
Test Case #0...PASSED
Test Case #1...PASSED
Test Case #2...PASSED
Test Case #3...FAILED
        Expected: "2"
        Received: "1"

自動でテストが走ります。(TZTester+CodeProcessorのおかげ) この例では#3のexampleがミスってるので、コードを修正しましょう。 全部passedになったら、Arenaの方でcompileして、submit。ポイントゲットです。

⚠️ **GitHub.com Fallback** ⚠️