2 minutes
競技プログラミングの準備をしてみた。
はじめてatcoderのコンテストに 参加してみた。
「競技プログラミングの準備」と調べてみると、アルゴリズムの勉強手法だとか、動作環境のセットアップ手法の解説しか出てこなかった。 ここでは、実際どうやって実行するのか、どういう流れで提出するのか、そのために何を準備するのかを記載する。
大きな流れは以下の通り。
- 例を利用したテストケースの準備
- コーディング
- 実行&自動テスト
- 提出
例を利用したテストケースの準備
問題には入力と出力の例が用意されている。 その内容を利用して自動テストを実行できるようにする。
今回のスクリプトでは「input」「answer」というフォルダーに同名のファイルに、入出力を記載する。
inputフォルダーにある入力例に対して、テストを実施する。
コーディング
main.pyというファイル名でコーディングを行う。 内容は全量コピペで提出できる内容とする。
実行&自動テスト
ここが本題。 やりたいことは、「テストケースを用いた実行&回答例との一致判定」。
以下のスクリプトを用意し、毎回実行するようにした。
#!/bin/sh
rm output/*
dirpath="./input"
files=`ls $dirpath`
pfinrf "\n"
for file in $files;
do
printf "=====${file}=======\n"
input="${file}"
output="${file}"
answer="${file}"
python main.py <input/${input} | tee output/${output}
if [ -e answer/${answer} ]; then
diff -u output/${output} answer/${answer} >tmp
if [ $? -eq 0 ]; then
printf "\nCA\n"
elif [ $? -eq 1 ]; then
printf "\n--- diff output answer --------------------\n"
cat tmp
printf "\nWA\n"
fi
rm tmp
fi
done
入力例が複数あっても、回答フォルダーに同名のファイルがあればテストできる。
以下のコマンドで実行を行う。
./run.sh
今後の課題
- 典型的な入力処理のテンプレート化
- 入出力例の取得自動化
問題サイトをスクレイピングすれば、入出力例を自動で取得できる気がする。
641 Words
2020-07-26 10:39 +0900