概要
mookjpさんのatcoder_practiceでテンプレート構築したあと、サンプルコードを手動で取り込むのが面倒だったので、online-judge-toolsで取得して配置するスクリプトを作成してみた。
私の実行環境
Windows11/Ubuntu 22.04.4 LTS(WSL)
atcoder_practiceのinit.shがちゃんと動く環境なら大丈夫なはず。
前提
当然以下2つの準備が必要(手順は割愛)
手順
①atcoder_practiceのinit.shと同じフォルダにget_testcase.shを配置。
get_testcase.sh
get_testcase.sh
#!/bin/bash -e
# ojコマンドで取得したものをatcoder_practiceに適合するように配置するshell
CONT_NM="abc351"
pattern="^[0-9]+$"
MOD_FOLDER="${CONT_NM}"
if [ $# -eq 3 ] && [[ $2 =~ $pattern ]] && [ -d $3 ]; then
CONT_NM=$1$2
MOD_FOLDER=$3
elif [ $# -eq 2 ] && [[ $2 =~ $pattern ]] && [ -d $1$2 ]; then
CONT_NM=$1$2
MOD_FOLDER="${CONT_NM}"
elif [ $# -eq 2 ] && [[ $2 =~ $pattern ]] && [ -d $2 ]; then
CONT_NM=$1$2
MOD_FOLDER=$2
elif [ $# -eq 1 ] && [[ $1 =~ $pattern ]] && [ -d abc$1 ]; then
CONT_NM=abc$1
MOD_FOLDER="${CONT_NM}"
elif [ $# -eq 1 ] && [[ $1 =~ $pattern ]] && [ -d $1 ]; then
CONT_NM=abc$1
MOD_FOLDER=$1
else
echo "usage: get_testcase.sh {contest name} {contest number} {folder name}"
echo "e.g. abc 351 abc351"
echo "**run ./init.sh first**"
exit 1
fi
BASEDIR=$(/bin/pwd)
for q in {a..f}; do
url="https://atcoder.jp/contests/${CONT_NM}/tasks/${CONT_NM}_$q"
PARENT_FOLDER="${BASEDIR}/${MOD_FOLDER}/$q/question"
if [ ! -d ${PARENT_FOLDER} ]; then
echo "run ./init.sh first"
exit 1
fi
if [ -d "${BASEDIR}/test" ]; then rm -r "${BASEDIR}/test"; fi
oj download "${url}" || exit 1
if [ -d "${PARENT_FOLDER}/testfiles" ]; then rm -r ${PARENT_FOLDER}/testfiles; fi
mv test ${PARENT_FOLDER}/testfiles/
cd ${PARENT_FOLDER}/testfiles
for i in {1..3}; do
if [ -f ./sample-$i.in ]; then
mkdir 00$i
mv ./sample-$i.in ./00$i/stdin.txt
mv ./sample-$i.out ./00$i/stdout.txt
fi
done
cd "${BASEDIR}" || exit 1
done
②init.shを動かしてコンテスト用のフォルダを生成する。
③get_testcase.shを動かす
./init.sh github.com/jitaoepsilon/atcoder abc351
# 初回は実行権限の付与を忘れずに
sudo chmod +x get_testcase.sh
./get_testcase.sh abc 351 abc351
補足
引数は何パターンか想定している。
# 適当にフォルダ名を設定していても第3引数に指定していれば動く
./get_testcase.sh abc 351 ABC351
# フォルダ名がabc351 or 351のパターンの場合、第3引数は省略可
./get_testcase.sh abc 351
# abcも省略できるが、フォルダ名は2パターンのみ(abc351 or 351)
./get_testcase.sh 351
今後
以下サイト等を参考にいろいろ引数関係のところを修正したさある。少なくとも以下は対応したい
- urlを直で指定するオプション
- 今のところ
[a-z]+[0-9]+
のパターンであれば大丈夫なはず
- 今のところ
- フォルダ名を直で指定するオプション(第3引数はオプション化したい)