AtCoderを始めてみて面倒に感じた作業をシェルスクリプトにしてみた - 5月 25, 2018 こんにちは、ぐぐりら(@guglilac)です。 ## 概要 AtCoderを始めました。 AOJを昔ちょっとやったことがあったり、授業でアルゴリズムの勉強をした程度なので競技プログラミングは圧倒的初心者ですが、ちょこちょこ頑張っていこうかと思います。 沼にははまらないぞ! で、今回はちょっとした小ネタ。 とりあえずAtCoderの過去問を埋めていってどんなもんか勉強しているのですが、書いたスクリプトは綺麗に整理しようと思っています。 ABC(AtCoder beginner contest)、ARC(AtCoder regular contest)、AGC(AtCoder grand contest)などいろんな種類のコンテストがあるみたいで、コンテストごとに結構な回数のコンテストがすでに行われているみたいです。 こんな感じにしたい * atcoder * ABC * abc001 * abc001_A.py * abc001_B.py * abc001_C.py * abc001_D.py * input.txt * abc002 * ARC * arc001 * AGC 一つ一つファイルやディレクトリを作っていては、解法を思いついてもすぐに書き始めることができずにイライラしそう。なによりダサい。 ## やったこと ので、こんなシェルスクリプトを書いてみました。 ```sh:mkdir_atcoder.sh # $1=cource name(lower case) # $2=number make_files(){ dir=`echo $1 | tr '[a-z]' '[A-Z]'` display_num=`printf %03d $2` if [ ! -e $dir ]; then mkdir $dir ; fi cd $dir if [ ! -e $1$display_num ];then mkdir $1$display_num cd $1$display_num touch input.txt if [[ $1 = "abc" ]] ; then L=(A B C D) elif [[ $1 = "agc" ]]; then L=(A B C D E F) elif [[ $1 = "arc" ]]; then if [[ "$2" -gt 57 ]]; then L=(C D E F) else L=(A B C D) fi fi for var in ${L[@]} do touch "$1$display_num$var.py" done fi } make_files $1 $2 ``` この`mkdir_atcoder.sh`をatcoderディレクトリの直下においておきます。 こんな感じで使います。 ```bash:terminal sh mkdir_atcoder.sh abc 95 ``` このコマンド一つで`ABC`ディレクトリの下に`abc095`ディレクトリを作成して、その中に各問題用のスクリプトの雛形を作成します。 またスクリプトの他にも、入力用に`input.txt`を各ディレクトリの下に作成します。提出する前に挙動を確認する用です。 余談ですが、gitで管理している場合は`input.txt`を`.gitignore`に入れておくと良いです。入力ファイルの中身はころころ変わるので。 ## おわりに あんまりシェルスクリプトは書いたことなかったのでいろいろ試しながら書いてみました。`cd`とか入ってるのはその名残です笑 言語も指定できるようにしたり、全コンテストの回数分一気に作成する(今回作った`make_files`関数をforで回せばできるけれど)などもありかと思いましたが、 * とりあえずpythonでやっていこうと思っている * 作りすぎて三日坊主になったら嫌だ という理由から今回みたいにしました。 今後も積極的に自動化のためのシェルスクリプトを書いていきたいです。 この記事をシェアする Twitter Facebook Google+ B!はてブ Pocket Feedly コメント
コメント
コメントを投稿