Skip to content

wotsushi/compro-library

Repository files navigation

compro-library

Test

Competitive programming's library

ライブラリの構造

ざっくり言うと、本ライブラリは競技プログラミングでよく使用するデータ構造や関数、スニペットをまとめたものです。

本ライブラリを構成する最小要素であるデータ構造や関数、スニペットを モジュール と呼ぶことにします。 さらに、モジュールを二種類に分類します。

  • シンボル: データ構造や関数、定数など他ソースコードにimport可能なモジュール
    • 例1: セグメント木
    • 例2: 単一始点最短経路問題をダイクストラ法で解いた結果を返す関数
  • スニペット: シンボルでないモジュール(他ソースコードにimport不可能なモジュール)
    • 例1: テンプレート
    • 例2: 浮動小数点数の小数部の桁数を指定して標準出力するスニペット

このように分類するのは、シンボルとスニペットでテストコードの書き方が異なるからです。

モジュールの集合を パッケージ と呼ぶことにします。 パッケージは、意味のある単位でモジュールをまとめるためのフォルダのようなものです。

本ライブラリの構造は下記のようになります。

  • ライブラリ
    • シンボルをまとめたパッケージA
      • シンボルA-1
      • シンボルA-2
      • ...
    • シンボルをまとめたパッケージB
      • シンボルB-1
      • シンボルB-2
      • ...
    • ...
    • スニペットをまとめたパッケージsnippet
      • スニペット1
      • スニペット2
      • ...

(暫定)スニペットはパッケージsnippetにのみ属すものとします。

ライブラリのディレクトリ構造

本リポジトリは前述のライブラリの構造に対応したディレクトリ構造になっています。 具体的には、下記のディレクトリ構造になっています。

  • lib: ライブラリのルートディレクトリ
    • package_A: シンボルをまとめたパッケージA
      • symbol_A_1: シンボルA-1に関するコード・ドキュメント・テストケースを管理
        • README.md
        • ソースコード
      • symbol_A_2: シンボルA-2に関するコード・ドキュメント・テストケースを管理
        • README.md
        • ソースコード
      • ...
    • package_B: シンボルをまとめたパッケージA
      • symbol_B_1: シンボルB-1に関するコード・ドキュメント・テストケースを管理
        • README.md
        • ソースコード
      • symbol_B_2: シンボルB-2に関するコード・ドキュメント・テストケースを管理
        • README.md
        • ソースコード
      • ...
    • snippet: スニペットをまとめたパッケージsnippet
      • snippet_1: スニペット1に関するコード・ドキュメント・テストケースを管理
        • README.md
        • ソースコード
      • snippet_2: スニペット1に関するコード・ドキュメント・テストケースを管理
        • README.md
        • ソースコード
      • ...

各モジュールの README.md はそのモジュールの使い方を説明するドキュメントです。

lib.yml

ライブラリの構造を表現するファイルが lib.yml です。 パッケージ/モジュールを追加・削除したら lib.yml も更新してください。 スニペット生成・自動テストは lib.yml に記述されているモジュールのみ対象となります。

lib.yml は以下のYAMLのスキーマにしたがいます。

type: seq
sequence:
  - type: map
    mapping:
      "package": { type: str }
      "modules":
        type: seq
        sequence:
          - type: { type: str }

lib.yml の具体的な記述例を示します。

- package: graph
  modules:
    - dijkstra
    - bellmanford
- package: snippet
  modules:
    - template
    - precision

About

Competitive programming's library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages