N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

同じ問題を何度も解く人のための atcoder-cli 補助コマンド

atcoder-cli https://github.com/Tatamo/atcoder-cli の補助コマンドを作って使っているので一応共有します。atcoder-cli は便利です。作者様ありがとうございます。

私は同じ問題を忘却曲線に従って複数回解いたり、手法を変えて複数回解いたりするため、1つの task ディレクトリに対して複数の main.cpp を持ちたいです。main.<リビジョン名>.cpp のようにして管理することにしました。

cpmain

https://github.com/ishikuro-shunsuke/atcoder/blob/main/cpmain

task のディレクトリで cpmain 2 などとすると、main.2.cpp としてテンプレートをコピーしてきます。引数は、ファイル名に使える文字列ならばどんなものでも可能です。cpmain dpmain.dp.cpp とするなど手法に応じて名付けたりするのも便利です。

#!/bin/bash
if [ $# -ne 1 ]; then
  echo "usage: cpmain <revision-name>" 1>&2
  exit 1
fi

cp `acc config-dir`/cpp/main.cpp main.${1}.cpp
echo -e "\n// STARTED: $(date '+%Y/%m/%d %H:%M:%S')" >> $_

最後に exec code main.${1}.cpp など追加してやると自動でエディタも開いてくれるのでいいのではないかと思います。

cts

task のディレクトリで、 cts 2 とするとcpmain の規則の名前の main.2.cpp の Compile, Test, Submit を自動的にやってくれます。cpmain と対になって使うものなので、もちろんこちらも 2 以外にも dp など自由な文字列を使用できます。

https://github.com/ishikuro-shunsuke/atcoder/blob/main/cts

#!/bin/bash
if [ $# -ne 1 ]; then
  echo "usage: cts <revision-name>" 1>&2
  exit 1
fi

g++ main.${1}.cpp &&
  oj t -d tests &&
  echo -e "// PASSED : $(date '+%Y/%m/%d %H:%M:%S')" >> main.${1}.cpp  &&
  acc s main.${1}.cpp

それぞれ問題を開始した時間、ローカルのテストをパスした時間を追記するようにしてあります。

コンテストは全然出ていなくて、これから頑張ります。おわり。