5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubに競プロライブラリを保管したい!を叶える備忘録

5
Posted at

Hello, World

Un_titledです。その辺の高校生をしています

AtCoderのルール変更を機にライブラリをようやくGitHubで管理する機運が高まってきたので、競プロ純粋培養として知らなかったことを備忘録として残しておきます。

主に

  • リポジトリで気になった部分
  • ライセンス
  • READMEバッジ
  • 分類

などについて残しておきます。

この記事に書いていないもの

  • ライブラリ化したほうがいいアルゴリズム
  • ライブラリ化に適切なレート帯
  • GitHubの丁寧な使い方説明
  • 精進方法

弱いくせにライブラリを作ってもだれも使わないよという悪口は受け付けておりません。

状況

灰色の時からNotionにメモをためていました。
(そのためvectorの使い方やら色々昔のメモまであります。わお。)
そのせいで今では不必要であったり、冗長すぎる説明がかなり多いです。
さらにアルゴリズムを軽視していた(?)ために分類するという考えがなく、ひたすら羅列していてかなり悲惨です。
なんとかしてGitHubにわかりやすく移植しようという試みなわけです。

リポジトリ作成

Description

これは何だ?と思っていたのですが、Aboutの部分(PCでは右側の表示)に出るやつらしいです。
とりあえず Un_titled's C++ library for competitive programming としておきました。

Add license (Configuration)

MITやCC0とかいう文字列をTwitterで観測していたので、何かしらのライセンスというものを付けるほうがよさそうだと思いました。
なんとなくついてた方がかっこよさそうなのでつけることにしました。

MITは、著作権表示とライセンス文を残すことなどを条件に、商用利用・改変・再配布などを広く認めるライセンスです。
一方、CC0は著作権などの権利を可能な限り放棄し、著作物をできるだけ自由に利用できるようにするための仕組みです。

とりあえず今回は、リポジトリ作成時に候補の上の方に出てきたMITにしました。
自分以外が使うことは到底なさそうなので、一旦自己満足で十分です。

READMEのバッジ

よくバッジみたいなのがついているのを見かけます。かっこいいですよね。
あれちょっとほしい。

ワークフロー状態(verifyがこんなのだよみたいな)を載せたいときは公式ドキュメントを参考にするとよさそうです。
私が載せたいものはもっと単純であり、

language

こういう...ただビジュを飾りたいだけのやつです

そんなときはshields.ioを参考にして書いたらよさそうです。

バッジは基本的に

![代替テキスト](https://img.shields.io/badge/<ラベル>-<メッセージ>-<色>)

で構成されており、ラベルというのは上のバッジ例では Language の部分、メッセージが C++20であり、メッセージの色が青に指定されています。

このノリで量産ができます。
結局自分がつけたのはこの原型から少し離れているものが多い気もしますが、まあ誤差です。
難しいバッジはつける暇と実力ができてからでいいかなと思ったので深掘りはしません。
色々なネットにおちてる記事やライブラリからバッジを 奪って 参考にさせてもらいました。

Cpp license Last Commit

とりあえずはこれらを入れました。コードは下のやつです。

![Cpp](https://img.shields.io/badge/-C++20-00599C.svg?logo=cplusplus&style=flat)
[![license](https://img.shields.io/github/license/Rieul0406/Un_titled_Library)](https://github.com/Rieul0406/Un_titled_Library/blob/main/LICENSE)
![Last Commit](https://img.shields.io/github/last-commit/Rieul0406/Un_titled_Library)

ライセンスだけリンクを入れ、押したらライセンスのページへ遷移するようにしました。

ライブラリを整理する

そのままベタベタ貼って言っても特に問題はありません。
ただ現在ライブラリを保管しているNotionの最大の欠点「計画性なく始めたため、分類されておらず探しにくい」が解決されません。

とりあえず以下のように整理しました。

  • template : テンプレートを置いておくところ
  • math : 繰り返し二乗法とか $_n \mathrm C _r$ など
  • data-structure : セグ木など
  • geometry : 偏角ソートなど
  • graph : トポロジカルソートなど
  • string : ロリハ
  • misc : その他(Zobrist hashなど)

拡張子の話

別に .cpp でもいいのですが、 .hpp にしてみました。
他の方のライブラリでも拡張子が .hpp になっていたりするので、多分一般的なんじゃないですかね(適当)。

.hpp は C++ のヘッダファイル拡張子として使われる傾向にあるそうです。
また、ライブラリの中で他の関数を使いたいときありませんか?
例えば、逆元を求めるときに繰り返し二乗法を使うとします。このとき、繰り返し二乗法のライブラリを記述したヘッダファイルをそのままインクルードして使うことができます。
便利!
冗長性を省けて、個人的にはこちらの方が好きです。

ただし、多重定義などへの注意をお忘れなく...
#pragma once は同一ヘッダの重複インクルード防止のためにつけました。

READMEの情報を増やす

READMEに自分が探すための目次的なのを付けました。
相対パスって便利!

Contributions, bug reports, and suggestions are welcome via GitHub Issues.

バグ報告や改善の提案などは、GitHub Issues からお気軽にお寄せください。

こんな感じで優しい誰かに直してもらえるのを期待しています。
ミスを見つけた方は教えていただきたいです。
移植の過程でタイポとかが増えている自信があります。

コメント

コメントでそれぞれの計算量とか書いておきました。
これもミスってそう。
間違いを見つけたら、ぜひIssuesなどで教えていただけると助かります。

展望

とりあえずこんなのができあがりました。やったー!

verify-ojとかいう語句を何度か観測しています。
あったらかっこいい。
いつかつけたいなとも思いつつ...

感想

今年の夏~秋にGitHubをたくさん使う機会があったので、慣れてれば別にそこまで大変じゃないんやなと感じたなど。

Gitのアカウント切り替えを忘れていたのを指摘してくれたっょっょありがとうございます。

もっといろいろなアルゴリズム勉強してライブラリを発展させていきたいなと思いました。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?