この記事の対象読者
ドットインストールや入門書で基本の勉強を済ませたのでpaizaで問題を解いてみたい方
vimの練習も兼ねてとりあえず最低限+αの準備をしたい方
※AtcoderやICPC等の競技プログラミングコンテストを始めてみたい方にはちょっとレベルの低い話かもしれません。
※今回はPHPで書いていますが、他の言語でも基本同じです。
まずは実行ファイルと標準入力用のファイルを準備
Desktopに移動してaojというディレクトリ(フォルダのこと)を作成しましょう。
$ cd ~/Desktop
$ mkdir aoj
aojディレクトリ下に実行ファイルと標準入力ファイルを作成します。
$ touch main.php input.dat
ちなみに.datファイルのdatはIT用語辞典/e-Wordsで説明されている通り『「データ」(data)の略号で、プログラムなどではなくデータを保存していることを示して』います。
[前半]簡単にvimで実行が出来るようにする
vimを開いているときに + eで設定しているシェルスクリプトが実行されるようにしましょう。
.vimrcを編集しましょう。
//ホームディレクトリに移動
$ cd ~/
//.vimrcを編集
vim .vimrc
.vimrcには下記のように書いてみましょう。
set number
" exec
nnoremap <space>e :wa \| !echo -e '\e[38;5;0m\e[48;5;51m --- exec --- \e[m';./exec.sh<cr>
これでvimを開いているときに「space + e」でexec.sh(後ほど作っていきます!ご安心を!)に書かれているシェルスクリプトが実行されます。
またset numberのおかげでvimに行番号が自動的に入るようになります。
[後半]簡単にvimで実行が出来るようにする
次にexec.shの中身を編集します。
//aojディレクトリに移動
$ cd ~/Desktop/aoj
//exec.shを編集
$ vim exec.sh
main.phpにinput.datが入力されて実行し、その結果が^aファイルに書き込まれるスクリプトを書いてみましょう。
php main.php < input.dat | tee ^a
簡単なプログラムで実験してみよう!
では簡単なプログラムを書いて上手く動くか実験してみましょう。
1
5
6
//標準入力を受け取る$first_data=fgets(STDIN);echo$first_data.PHP_EOL;$second_data=fgets(STDIN);echo$second_data.PHP_EOL;$third_data=fgets(STDIN);echo$third_data.PHP_EOL;
main.phpを編集中に「space+e」と押してください。
1,5,6が順番に出力されるはずです。
また同じディレクトリ下に^aファイルが出来ているはずです。中身を確認すると出力結果と同じデータが入っています。
$ ls
exec.sh main.php input.dat ^a
$ view ^a
->^aの中身は下記のようになっているはず!
1
5
6
次はoutput.datというファイルを同じディレクトリの中に作ってみましょう。
まずはoutput.datの中身を^aと同じにします。
1
5
6
下記のように^aとoutput.datの中身を比較してみます。
差異がないので何も出ないはずです。
$ cd ~/Desktop/aoj
$ diff ^a output.dat
次にoutput.datの3行目だけ^aと違う数値にすると。。。
1
5
7
今回は3行目に差異が教えてくれます!!!
$ diff ^a output.dat
3c3
< 6
---
> 7
お疲れ様です!これでpaizaのスコアアップ問題を解く準備完了です!お疲れ様でした!
[最後に]参考になるかもしれないサイト
AOJ-ICPC
paizaに比べると少しムズカシイ(最低ランクの問題でもBランク以上?)が他の人の解答が見れるのでオススメです。vimtutorでVim力をアップ
vimの練習をしたい方はまず上記で紹介されているvimチューターから始めるのがオススメです。