make

・makeでコンパイルする習慣をつける
競技プログラミング的な問題のためにコードをコンパイルするとき、いつも

$ g++ hoge.cpp -o hoge.out

と書いていた。.outにするのは.oだと文字数が.cppと合わないし実行ファイルだから拡張子無しってするとディレクトリと区別がつきにくいし、という理由。んで常にファイル名を一致させて.outにコンパイルするから、

$ g++ hoge.cpp

くらいで済ませてエイリアス噛ませたいとか考えたけど、便利なことにmakeというコマンドがあるから、これにファイル名を入れればOKということにする。でもパターンルールがよくわかってなくて、ぐにぐに調べて適当に書いてみた結果、

//Makefile
%: %.cpp
    g++ $^ -o $@.out

としたら、

$ make hoge

でいつも書いている冒頭のコマンドになってくれた。これからはmakeでコンパイルしようね。

・テストのためのリダイレクトを省略する
同じように、競技プログラミングのコード書くときは、テストで

$ ./hoge.out < hoge.in

なんて書いたりしてた。これも面倒なので、シェルスクリプトを書く。

//io.sh ファイル名にセンスがないし絶対他に何かと被る、iojsとか
#!/bin/sh
if [ $# -ne 1 ]; then
    echo 'only one argument: ./$1.out < $1.in'
    return 1
fi
./$1.out < $1.in
exit 0

exitとか要るんかと思うけどとりあえず書いた。実際に使うためのシェルスクリプトを書いたのは初めてかもしれない(さっぱりたいしたことを書いてないけど)。
ともかくこれで、相変わらずaliasで alias io='~/.../io.sh'みたいにして(シェルスクリプトまとめておくフォルダも作ったから忘れないように)、

$ io hoge

でやりたいことができるようになった。