Skip to content

Commit

Permalink
Merge pull request #66 from tsutaj/feature
Browse files Browse the repository at this point in the history
v1.5.0-release
  • Loading branch information
tsutaj authored Aug 27, 2021
2 parents d4360bc + 1d00672 commit 77c994d
Show file tree
Hide file tree
Showing 34 changed files with 539 additions and 166 deletions.
25 changes: 13 additions & 12 deletions .github/workflows/format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,19 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v1

- name: Set up Python
uses: actions/setup-python@v1
- name: Set up Python
uses: actions/setup-python@v1

- name: Install dependencies
run: |
pip3 install .[dev]
- name: Install dependencies
run: |
pip3 install .[dev]
- name: Run tests
run: |
ss-manager -h
flake8 statements_manager/ setup.py
black --check --diff statements_manager/ setup.py
mypy statements_manager/ setup.py
- name: Run tests
run: |
ss-manager -h
flake8 statements_manager/ setup.py
isort statements_manager/ setup.py --check --diff
black --check --diff statements_manager/ setup.py
mypy statements_manager/ setup.py
12 changes: 12 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"python.pythonPath": "virtualenv/bin/python",
"python.linting.enabled": true,
"python.linting.flake8Enabled": true,
"python.linting.pylintArgs": ["--rcfile=setup.cfg"],
"python.linting.mypyEnabled": true,
"python.formatting.provider": "black",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
}
90 changes: 48 additions & 42 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

## Screencast

![Peek 2021-03-23 12-17](https://user-images.githubusercontent.com/19629946/112087941-427fd900-8bd2-11eb-8cd5-e76bb73a8e23.gif)
![screencast](https://user-images.githubusercontent.com/19629946/131149286-39111b9b-9719-4693-98f9-88ed8caea34d.gif)

## Quickstart

Expand Down Expand Up @@ -88,6 +88,7 @@ pip install statements-manager
![Screenshot from 2021-08-19 23-24-51](https://user-images.githubusercontent.com/19629946/130088491-761cf3bb-6b8c-4bb4-9396-91e98be6ab8a.png)

![Screenshot from 2021-08-19 23-25-11](https://user-images.githubusercontent.com/19629946/130088501-5e1208df-445a-4797-be31-60a77f04c91d.png)

- 以下のコマンドを打って、JSON ファイルを作業ディレクトリに登録します
- `WORKING_DIR` とは、"How to use" の冒頭にあるように、各問題ディレクトリの 1 つ上の階層です
- 登録が終われば、`CREDS_PATH` にある json ファイルは削除しても構いません
Expand All @@ -98,31 +99,18 @@ ss-manager reg-creds WORKING_DIR CREDS_PATH

### 3. 問題ごとに設定ファイル `problem.toml` を作る

問題ディレクトリごとに設定ファイルを作ります。`problem.toml` という名前にして `toml` 形式で記述します。詳しい例は [`sample/A/problem.toml`](https://github.com/tsutaj/statements-manager/blob/master/sample/A/problem.toml) をご覧ください
問題ディレクトリごとに設定ファイルを作ります。`problem.toml` という名前にして `toml` 形式で記述します。詳しい例は [`sample/A/problem.toml`](https://github.com/tsutaj/statements-manager/blob/master/sample/A/problem.toml) などの、`sample` ディレクトリにある設定ファイルをご覧ください

**tips (Rime を使用したことがある方向け)**: このファイルは Rime で言うところの `PROBLEM` ファイルに似た位置づけです。`PROBLEM` と同じ階層に保存することを推奨します。

**tips**: パスの記述は絶対パスでも良いですし、`problem.toml` からの相対パスでも構いません。

設定する項目は以下の通りです。

- `mode` (**必須**)
- `docs` もしくは `local` のいずれか一方を指定します
- `docs`: 問題文のファイルが Google Docs 内に存在することを想定したモードで実行します
- `local`: 問題文のファイルがローカルに存在することを想定したモードで実行します
- `id` (**必須**)
- 問題 ID を指定します
- アプリケーション実行中の問題判別や、出力される HTML の名前に使用されます
- 例: id に `A` と指定したならば、出力 HTML は `A.html` という名前になる
- ID は、実行時に操作対象となる設定ファイルそれぞれで **一意でなければなりません**。例えば、`ID = "A"` となる設定ファイルが複数存在してはいけません
- `statement_path` (**必須**)
- docs mode の場合: 問題文の Document ID を記載します
- Document ID とは Docs の URL 末尾にある、英数字でできた長い文字列のことです
- local mode の場合: 問題文が記載されている Markdown ファイルへのパスを記載します
- `lang` (任意)
- 問題文が書かれている言語を設定します
- `ja` (日本語) もしくは `en` (英語) のいずれか一方を指定します
- 何も指定しなかった場合は `en` が設定されているとみなして実行します
- ID は、実行時に操作対象となる設定ファイルそれぞれで **一意でなければなりません**。例えば、`id = "A"` となる設定ファイルが複数存在してはいけません
- `assets_path` (任意)
- 問題文に添付する画像などが含まれているディレクトリへのパスを指定します (問題文に図が必要な場合などにご利用ください)
- `assets_path` 以下に存在する全てのファイル・ディレクトリが `ss-out` ディレクトリ中の **`assets` ディレクトリにコピー** されます。画像などのリンクを張る際は、この仕様を念頭に置いて指定してください。
Expand All @@ -133,14 +121,32 @@ ss-manager reg-creds WORKING_DIR CREDS_PATH
- 拡張子が `.in` / `.out` / `.md` のいずれかである
- `.in` ファイル: 入力例を表すファイル
- `.out` ファイル: 出力例を表すファイル
- `.md` ファイル: 入出力例に関する説明 (`sample` ディレクトリの A 問題参照)、またはインタラクティブの入出力例を表すファイル (`sample` ディレクトリの I 問題参照)
- `.md` ファイル: インタラクティブの入出力例を表すファイル (`sample` ディレクトリの I 問題参照)
- `[言語名]/*.md` ファイル: 入出力例に関する説明 (`sample` ディレクトリの A 問題参照)
- 例: 日本語で `00_sample_00` に関する説明をしたいならば、`[sample_path]/ja/00_sample_00.md` というファイルを用意します
- **注意: v1.5.0 より、インタラクティブの入出力例のために用意する Markdown ファイルと、入出力例に関する説明のために用意する Markdown ファイルは、想定する格納場所が明確に異なります**
- ファイル名に `sample` が部分文字列として含まれる
- `params_path` (任意)
- 問題制約となるパラメータの値を、generator や validator で利用できるようにファイルに出力したいときに、パラメータを記載したファイルの出力パスを指定します
- 例: `path/to/constraints.hpp` としたならば、当該パスにファイルが生成されて出力されます
- 何も指定しなかった場合は、ファイルが出力されません
- 指定されたパスの拡張子から言語を推定し、その言語に合ったパラメータファイルを出力するようになっています
- 注意: 現状は C++ のみ (`.cpp`, `.cc`, `.h`, `.hpp`) 対応しています。今後対応言語は増やす予定です
- `[[statements]]` (**必須**)
- 用意する問題文ファイルそれぞれについて設定します。設定方法の例は `sample` ディレクトリにある A 問題・C 問題などを参照してください
- A 問題では、英語・日本語の両方で問題文を作成する例を示しています
- C 問題では、英語・日本語の両方で問題文を作成することに加えて、制約のみが異なる問題を作成する例も示しています
- 各問題文ファイルについて以下を設定します
- `path` (**必須**)
- ローカルに問題文が存在する場合: 問題文が記載されているファイル名を指定します
- Google Docs に問題文が存在する場合: Google Docs の ID か、もしくは Google Docs のファイルの URL を指定します。設定方法の例は `sample` の H 問題を参照してください。
- `lang` (任意)
- 問題文が書かれている言語を設定します
- `ja` (日本語) もしくは `en` (英語) のいずれか一方を指定します
- 何も指定しなかった場合は `en` が設定されているとみなして実行します
- `mode` (任意)
- `docs` または `local` のどちらかを指定します。問題文ファイルが存在する場所に応じて設定ください
- 何も設定しなかった場合はモードが自動で認識されますので、通常は `mode` を設定する必要はありません
- `[constraints]` (任意)
- 問題制約を記述します
- `[定数名] = [定数]` のように記載します
Expand Down Expand Up @@ -189,35 +195,36 @@ name: update-statements

on:
push:
branches: [ master ]
branches: [master]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install statements-manager
- name: Run statements-manager
run: |
ss-manager run ./
- name: Commit files
run: |
git add --all
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git commit -m "[ci skip] [bot] Updating to ${{ github.sha }}."
- name: Push changes
uses: ad-m/github-push-action@master
with:
branch: ${{ github.ref }}
- uses: actions/checkout@v2
- name: Set up Python 3
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install statements-manager
- name: Run statements-manager
run: |
ss-manager run ./
- name: Commit files
run: |
git add --all
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git commit -m "[ci skip] [bot] Updating to ${{ github.sha }}."
- name: Push changes
uses: ad-m/github-push-action@master
with:
branch: ${{ github.ref }}
```
## Links
- [Rime](https://github.com/icpc-jag/rime)
Expand All @@ -227,7 +234,6 @@ jobs:
- 当アプリケーションの機能は、これの影響を強く受けています
- library-cheker-problems の作問機能で出来ることを網羅しつつ、Rime と親和性が良い設計にし、さらに作問時に便利な Google Docs とも連携させたいというモチベーションがあり、このアプリケーションが作られました
## For Contributors
- 本リポジトリへの Issue / PR など、なんでも歓迎です。詳細は [`CONTRIBUTING`](./CONTRIBUTING.md) をご覧ください。
- 本リポジトリへの Issue / PR など、なんでも歓迎です。詳細は [`CONTRIBUTING`](./CONTRIBUTING.md) をご覧ください。
16 changes: 10 additions & 6 deletions sample/A/problem.toml
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
# choose mode ('docs' or 'local')
mode = "local"

# problem id (it is used for the name of output html file)
id = "A"

# pato to a statement, output params
statement_path = "./statement/statement.md"
# output params
params_path = "./tests/constraints.hpp"

# path to statements
[[statements]]
path = "./statement/statement_ja.md"
lang = "ja"

[[statements]]
path = "./statement/statement_en.md"
lang = "en"

# write constraints
[constraints]
MIN_AB = 1
MAX_AB = 1_000_000_000
MIN_T = 1
MAX_T = 100_000

File renamed without changes.
31 changes: 31 additions & 0 deletions sample/A/statement/statement_ja.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# A+B

## 問題文

2 つの整数 $A$, $B$ が与えられます。$A + B$ を出力してください。

$T$ 個のテストケースが与えられますので、$T$ 行出力してください。

## 入力

```
$T$
$A_1$ $B_1$
$A_2$ $B_2$
...
$A_T$ $B_T$
```

- 入力は全て整数で与えられる
- ${@constraints.MIN_T} \leq T \leq {@constraints.MAX_T}$
- ${@constraints.MIN_AB} \leq A_i, B_i \leq {@constraints.MAX_AB}$

## 出力

$T$ 行出力してください。

$i$ 行目には $A_i + B_i$ の計算結果を出力してください。

## 入出力例

{@samples.all}
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
Note that a new-line is required in the end of output.

1 change: 1 addition & 0 deletions sample/A/tests/ja/00_sample_00.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
出力の最後の改行を忘れないようご注意ください。
14 changes: 7 additions & 7 deletions sample/B/problem.toml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# 問題文が存在する場所に応じてモードを選ぶ
mode = "local"
lang = "ja"

# 問題 ID (必須, 出力 html 名に使用される)
id = "B"

# 問題文が格納されている場所
# mode が local である場合、Markdown ファイルへのパスを記載する
statement_path = "./statement/statement.md"
# 制約の出力先となるファイル名
params_path = "./tests/constraints.hpp"

# 問題文が格納されている場所
# 問題文ファイルがローカルにある場合、Markdown ファイルへのパスを記載する
[[statements]]
path = "./statement/statement.md"
lang = "ja"

# 問題制約を書く
[constraints]
MIN_N = 1
Expand Down
2 changes: 1 addition & 1 deletion sample/B/statement/statement.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ $S$

## 出力

与えられる文字列が回文であれば ``Yes`` を、そうでなければ ``No`` を一行で出力してください。**出力の末尾で改行してください。**
与えられる文字列が回文であれば `Yes` を、そうでなければ `No` を一行で出力してください。**出力の末尾で改行してください。**

## 入出力例

Expand Down
37 changes: 37 additions & 0 deletions sample/C/problem.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# problem id (it is used for the name of output html file)
id = "C"

# output params
params_path = "./tests/constraints.hpp"

# path to statements
[[statements]]
path = "./statement/en/statement_1.md"
lang = "en"

[[statements]]
path = "./statement/en/statement_2.md"
lang = "en"

[[statements]]
path = "./statement/ja/statement_1.md"
lang = "ja"

[[statements]]
path = "./statement/ja/statement_2.md"
lang = "ja"

# write constraints
[constraints]
MIN_A = 1
MAX_A = 1_000_000_000

MIN_N_SMALL = 1
MAX_N_SMALL = 1000
MIN_Q_SMALL = 1
MAX_Q_SMALL = 1000

MIN_N_LARGE = 1
MAX_N_LARGE = 100_000
MIN_Q_LARGE = 1
MAX_Q_LARGE = 100_000
31 changes: 31 additions & 0 deletions sample/C/statement/en/statement_1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Static Range Sum

## Note

The difference between C1 and C2 is only constraints of $N$ and $Q$.

## Problem statement

You are given a non-negative integer sequence $A = (a_0, a_1, \ldots, a_{N-1})$ with the length $N$. Process the following $Q$ queries in order:

- You are given integers $l_i$​ and $r_i$​. Print $\sum_{k=l_i}^{r_i-1}$​.

## Input

```
$N$ $Q$
$a_0$​ $a_1$​ $\ldots$ $a_{N-1}$​
$l_1$​ $r_1$​
$\vdots$
$l_Q$​ $r_Q$​
```

- All inputs are integers.
- ${@constraints.MIN_N_SMALL} \leq N \leq {@constraints.MAX_N_SMALL}$
- ${@constraints.MIN_Q_SMALL} \leq Q \leq {@constraints.MAX_Q_SMALL}$
- ${@constraints.MIN_A} \leq a_i \leq {@constraints.MAX_A}$
- $1 \leq l_i < r_i \leq N$

## Sample

{@samples.all}
31 changes: 31 additions & 0 deletions sample/C/statement/en/statement_2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Static Range Sum

## Note

The difference between C1 and C2 is only constraints of $N$ and $Q$.

## Problem statement

You are given a non-negative integer sequence $A = (a_0, a_1, \ldots, a_{N-1})$ with the length $N$. Process the following $Q$ queries in order:

- You are given integers $l_i$​ and $r_i$​. Print $\sum_{k=l_i}^{r_i-1}$​.

## Input

```
$N$ $Q$
$a_0$​ $a_1$​ $\ldots$ $a_{N-1}$​
$l_1$​ $r_1$​
$\vdots$
$l_Q$​ $r_Q$​
```

- All inputs are integers.
- ${@constraints.MIN_N_LARGE} \leq N \leq {@constraints.MAX_N_LARGE}$
- ${@constraints.MIN_Q_LARGE} \leq Q \leq {@constraints.MAX_Q_LARGE}$
- ${@constraints.MIN_A} \leq a_i \leq {@constraints.MAX_A}$
- $1 \leq l_i < r_i \leq N$

## Sample

{@samples.all}
Loading

0 comments on commit 77c994d

Please sign in to comment.