Skip to content
This repository was archived by the owner on Feb 9, 2024. It is now read-only.

Latest commit

 

History

79 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

procon

PROCedure ON how to easy procon!

procon

proconとは

procon は プログラミングコンテストの解答環境です。TOPSIC や AtCoder でプログラミング問題を解答する時に使用します。現在はαリースです。

  • ロケットスタート: コマンド一つで解答テンプレートを作成します。:rocket:
  • 楽楽テスト: コマンド1つで解答スクリプトのテストを実行できます。:laughing:

提供コマンド

以下コマンドを利用してプロコン解答でをしましょう!

コマンド 説明
npm run template ${WORKNAME} 解答テンプレートを作成します。WORKNAMEには作業名を与えます。言語のデフォルトはpythonです。
npm run test ${WORKNAME} WORKNAME配下のスクリプトをテストします。
npm run sample-setup サンプルを諸々セットアップします。忙しい人や開発者用です。

ハンズオン(5分)

AtCoder から問題をお借りして、使い方を見てみましょう。 python3 で AtCoder Beginners Selection PracticeA - Welcome to AtCoder を解答してみます。

procon-demo ※デモ動画ではターミナルを利用していますが、普段使っているエディタを使うことで快適に試せます。VSCodeやAtomなど。

  1. 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
    
  2. 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
    
  3. 先程は直接スクリプトを実行して動作を確かめました。しかし、複数の期待する入出力セットがある場合、何度も打ち込み確認するのは非常に面倒です。proconではこの面倒なテストを自動化してくれるコマンドがあります!
    確認したい標準入力を打ち込む代わりに、stdin配下にファイルを作成して記述します。xxx.inという名前にして下さい。次に、xxx.inを入力としたときに期待する出力をexpect配下にファイルを作成して記述します。xxx.outという名前にして下さい。
    templateコマンドによって、すでに3ファイルずつ作成されています。それぞれ以下のように変更して下さい。

    1.in

    1
    2 3
    test
    

    1.out

    6 test
    

    2.in

    72
    128 256
    myonmyon
    

    2.out

    456 myonmyon
    

    3.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ページからスクリプトを提出しましょう!

  4. 解答し終わったディレクトリはそのまま残しても良いですし、rm -rf ${WORKNAME}として削除しても構わないでしょう。これまでのハンズオンを手軽に試したい場合、sample-setupコマンドが利用できます。基本的な使い方は以上です。プロコンをエンジョイしましょう!

動作条件

name version description
OS - 動作確認したOSは以下。Ubuntu 20.04.2 LTS
node - なるたけ新しいバージョン
利用言語の実行環境 - python3.5, php7.4など

注意

解答コードの公開に制限があるコンテストは多いです。そもそも公開不可であったり、一定期間後でないと公開不可だったりします。解答ファイルの取り扱いはそれぞれのコンテスト規約に準拠してください。例えばAtCoderの規約では公開可能時間前の解答コード公開は規約違反になります。意図せずともpublicなリポートリポジトリにpushすると、それがmainブランチでなくても誰でも閲覧可能な状態になります。後悔することがないよう、十分注意してください。

License

MIT License

About

競プロ用解答環境

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages