PROCedure ON how to easy procon!
procon は プログラミングコンテストの解答環境です。TOPSIC や AtCoder でプログラミング問題を解答する時に使用します。現在はαリースです。
- ロケットスタート: コマンド一つで解答テンプレートを作成します。:rocket:
- 楽楽テスト: コマンド1つで解答スクリプトのテストを実行できます。:laughing:
以下コマンドを利用してプロコン解答で楽をしましょう!
| コマンド | 説明 |
|---|---|
npm run template ${WORKNAME} |
解答テンプレートを作成します。WORKNAMEには作業名を与えます。言語のデフォルトはpythonです。 |
npm run test ${WORKNAME} |
WORKNAME配下のスクリプトをテストします。 |
npm run sample-setup |
サンプルを諸々セットアップします。忙しい人や開発者用です。 |
AtCoder から問題をお借りして、使い方を見てみましょう。 python3 で AtCoder Beginners Selection PracticeA - Welcome to AtCoder を解答してみます。
※デモ動画ではターミナルを利用していますが、普段使っているエディタを使うことで快適に試せます。VSCodeやAtomなど。
-
templateコマンドで解答テンプレートを作成します。WORKNAME引数には問題名を使うのが良いでしょう。今回はwelcome-to-atcoderとします。下記コマンドで解答テンプレートが作成されます。$ npm run template welcome-to-atcoder > procon@0.1.0 template > npm run template:python 3 "welcome-to-atcoder" > procon@0.1.0 template:python > ./src/create.sh python "3" "welcome-to-atcoder" welcome-to-atcoderをpythonでセットアップしました。welcome-to-atcoderディレクトリに移動して構成を確認しましょう。welcome-to-atcoder.pyには解答スクリプトを書き込みます。stdin,expect配下には入出力ファイルが作成されましたが、今は全て空ファイルです。これらは後述するtestコマンドで利用します。$ cd welcome-to-atcoder $ tree . . ├── expect │ ├── 1.out │ ├── 2.out │ └── 3.out ├── stdin │ ├── 1.in │ ├── 2.in │ └── 3.in └── welcome-to-atcoder.py -
welcome-to-atcoder.pyに解答スクリプトを書き込みます。下記コードを書き込んで下さい。# -*- coding: utf-8 -*- # 整数の入力 a = int(input()) # スペース区切りの整数の入力 b, c = map(int, input().split()) # 文字列の入力 s = input() # 出力 print("{} {}".format(a+b+c, s))試しにスクリプトを実行してみましょう。
python3 welcome-to-atcoder.pyを実行します。入力待ちになっているはずなので、問題の入力例1を入力してみます。$ python3 welcome-to-atcoder.py 1 2 3 testすると、スクリプトが実行されます。下記出力が表示されたらここまで問題ないです!
6 test -
先程は直接スクリプトを実行して動作を確かめました。しかし、複数の期待する入出力セットがある場合、何度も打ち込み確認するのは非常に面倒です。proconではこの面倒なテストを自動化してくれるコマンドがあります!
確認したい標準入力を打ち込む代わりに、stdin配下にファイルを作成して記述します。xxx.inという名前にして下さい。次に、xxx.inを入力としたときに期待する出力をexpect配下にファイルを作成して記述します。xxx.outという名前にして下さい。
templateコマンドによって、すでに3ファイルずつ作成されています。それぞれ以下のように変更して下さい。1.in
1 2 3 test1.out
6 test2.in
72 128 256 myonmyon2.out
456 myonmyon3.in, 3.out は使わないので削除します。
$ rm stdin/3.in expect/3.out準備完了!
testコマンドでテストを実行します。WORKNAME引数にはテストするスクリプトがあるディレクトリ名を指定して下さい。今回ならwelcome-to-atcoderです。$ npm run test welcome-to-atcoder > procon@0.1.0 test > ./src/test.sh "welcome-to-atcoder" 1: expect/1.out stdout/1.out ... OK! 2: expect/2.out stdout/2.out ... OK! TOTAL: 2, PASS: 2, MISS: 0全てのテストに合格していることがわかりました!もし期待する出力でない場合はMISSにカウントされます。全てのテストに合格したら、参加しているプロコンのwebページからスクリプトを提出しましょう!
-
解答し終わったディレクトリはそのまま残しても良いですし、
rm -rf ${WORKNAME}として削除しても構わないでしょう。これまでのハンズオンを手軽に試したい場合、sample-setupコマンドが利用できます。基本的な使い方は以上です。プロコンをエンジョイしましょう!
| name | version | description |
|---|---|---|
| OS | - | 動作確認したOSは以下。Ubuntu 20.04.2 LTS |
| node | - | なるたけ新しいバージョン |
| 利用言語の実行環境 | - | python3.5, php7.4など |
解答コードの公開に制限があるコンテストは多いです。そもそも公開不可であったり、一定期間後でないと公開不可だったりします。解答ファイルの取り扱いはそれぞれのコンテスト規約に準拠してください。例えばAtCoderの規約では公開可能時間前の解答コード公開は規約違反になります。意図せずともpublicなリポートリポジトリにpushすると、それがmainブランチでなくても誰でも閲覧可能な状態になります。後悔することがないよう、十分注意してください。
