Git Product home page Git Product logo

ac-library-rb's People

Contributors

9sako6 avatar kotatsugame avatar kumakumarb avatar magurofly avatar universato avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

ac-library-rb's Issues

Change directory name from `src` to `lib`

他言語を見てsrcディレクトリにライブラリを入れてしまいましたが、改めて考えたところsrcはコンパイル言語でのコンパイル前のコードを入れるイメージです。
bundle gemでgemの雛形を作るときにlibディレクトリが作られるそうで、Ruby使う人にとってはlibがわかりやすいのかなと思いました。本レポジトリの性質的にもlibがあっていると思いました。
なお、自分としては、本家AtCoderライブラリに合わせているものの、AtCoderに限らず一般的に競プロなどで使われるライブラリを置いているつもりなので、本家ライブラリに合わせてatcoderという名称を用いるのはわかりやすいですが美しくない気がするので反対です。

ディレクトリ名srcとかの謎と作法 - WebTecNote

srcディレクトリにソースを入れ、ビルド結果をbuildディレクトリに入れるのは「コンパイルする言語ではお馴染みの作法」でも、コンパイル不要だとそうでもない。
EclipseなんかでJavaの新規プロジェクト作るとデフォルトでsrcというフォルダが作られるがPythonやRubyでは作られない。

SCC: stack level too deep

Aizu Online Judge: GRL_3_C
In the above problem, the current SCC causes error which says "stack level too deep".
It may be better to reimplement SCC without recursion.

Aizu Online Judge: GRL_3_C
AOJは再帰の制限がデフォルトか何かで厳しく、
上記の問題で stack level too deep となるので、再帰をやめる形で実装を変更した方がいいかもしれないです。

とても消極的にRuboCopを推奨したい

Rubyには、コードのスタイルをチェックや自動修正してくれるRuboCopというgemがあります。

レポジトリ全体でスタイルが強制されていた方が、書いたり読みやすかったりすることも多いと思います。
一方で、デフォルトで様々な点について修正を要求してくるため、嫌う人は嫌っています。
また、PRは気軽に送って欲しいという気持ちやスタイルを強制させたくないという気持ちもあり、慎重になっています。

他に、RuboCopを使える人が自動修正すればいいと考える一方で、自分が読みやすいと思って書いたコードを自動的に修正されたくないこともあると考えてます。

問題点が整理できてないのですが、
「みんなにも強制させたいスタイル」や「好きにさせて欲しいスタイル」があったら教えて欲しいです!

自分は、インデントの幅2は、基本的に強制させたいです。
一方で、文字列のリテラルはシングルクォートでもダブルクォートでもどちらでも良いと思っています。

絶対的にRuboCopのデフォルトルールを推奨するわけではないですが、使ってみていいなと思うこともあると思うのでPRを送って下さる向けにその旨をREADMEに書かなければと考えています。

READMEに書きたいことを整理する

何を書きたいか整理する

書きたいと思っていること(概要)

考えていること、書きたいと思っていること(詳細)

  • 使い方(How to Use)
    • 現状、「ディレクトリを漁って、コードをコピペして使って下さい」という形。
    • 「ドキュメントが未完成なので、本家ACLのドキュメントを参考にして下さい」の一言が欲しいかもしれないです。
  • ドキュメントの見方やリンクをつけたい(Documents and links for them)
  • ディレクトリ構造を示す(Directories)
    • 図は明示しなくても良さそう。
    • 本家ACLライブラリを真似している旨を書く。
    • srcディレクトリの中にコードがあることを書く。(本家ライブラリのディレクトリはatcoderで異なる)
  • コントリビュート方法(How to Contribute)
    • お好きにという感じです。
  • ライセンスを明示したい(LICENSE)
    • 現状、本家ライブラリのソースのライセンスを置いていて、権利も責任も放棄しているはず。
    • 「バグがあってもACできなくても責任とれないので、バグあったら報告・修正して下さい」という気分。

参考

他の言語のACLライブラリが参考にできそう
Unofficial Portings of AtCoder Library (Googleスプレッドシート)

add maxflow and test for it(最大流を追加する)

kuma_rbさんのコードを参考にして良いと言われたので、参考にして良さそうです。

https://twitter.com/kumakum10972549/status/1304427282056929285

最大流、最小費用流など実装()してPlactice Contestに提出したものがいくつかあります。
atcoderの名前はkuma_rbです。
私はコピペ改竄されても大丈夫ですので、よかったら確認してみてください。

また、実際のところわかりませんが、間違えやすいミスがあるらしいので貼っておきます。

https://twitter.com/Mi_Sawa/status/1303965974064889856

Dinic 法を実装/写経する際、1バイトのミスで、指数時間になることがあります。
よく見かけるミスなので、この実装を撃墜するケースを作りました。
https://gist.github.com/MiSawa/47b1d99c372daffb6891662db1a2b686
特に C++ に詳しくない人が他言語に移植するとやりがちだと思うので、テストするといいと思います。
ちなみに、正しい実装だと Θ(n)、間違った実装で Θ(2^(n/2)) になっていると思います。

https://twitter.com/takytank/status/1304273435695239169

正しいコードはループのカウンターが参照になっていて、ループが回る度に参照元のオブジェクトも同時に加算されるんですが、参照のための&を付け忘れると同時加算が無くなってしまいます。(多分ループが余計にむっちゃ回る)

convolution.rbの過去版を復活させる

現行版がAtCoder Library Practice Contestの練習問題で通らなくなってしまったようなので、過去版を復活させる。
現行版も残す形で両方あればいいと考えてますが、ファイル名をどうするかなど何も決まってない。

Delete `frozen_string_literal: true`

I want to delete frozen_string_literal: true on files under src dirctory.

frozen_string_literal: trueを削除したいです。特にsrcディレクトリ配下にあるものを削除したいです。
マナー的な感じで書いてましたが、書いても特に意味がなく邪魔なだけではないでしょうか。
RuboCopにもここの忠告は出さないようにさせるつもりです。

他の方がAtCoderで本ライブラリを使って、frozen_string_literal: trueが先頭にない旨の警告がでてるのを見て、削除しようと強く思いました。

add DSU Document(Ja)

雛形的な形でとりあえずあった方が良いのではと思い作ろうと思いました

遅延セグメントツリーの引数の変更

Change the order of argumets for LazySegtree.

遅延セグメントツリーの引数を変更する。

遅延セグメントツリーの引数を本家側に寄せた方がいいという意見があったため。
opとeは対応関係にあり、compositionとmappingとidが対応関係にあって、本家同様に並べた方がいいのかもしれない。

本家ACLドキュメント

(1) lazy_segtree<S, op, e, F, mapping, composition, id> seg(int n);
(2) lazy_segtree<S, op, e, F, mapping, composition, id> seg(vector v);

現在のac-library-rb

def initialize(v, e, id, op, mapping, composition)

経緯的には、遅延セグ木は持たせたいブロック(Proc)が3つあって、参考にさせてもらったkuma-rbさんのRuby遅延セグ木は初期化後にProcをsetするためのインスタンスメソッドを別に定義してて、初期化時のProcの引数は省略できてもいいかもと思いながら作るも、理由はどうあれsetterメソッドは作られずに放置されてしまった状況。

参考

ac-library-python

https://github.com/not522/ac-library-python/blob/a30b7e590271d7b77459946695ae8ce984e50f0a/atcoder/lazysegtree.py#L6-L14

LazySegTree(op, e, mapping, composition, id_, a)

配列や配列のサイズの引数のaが右端に来ている。ac-library-rbは左端。

crystal

単位元などを直接引数にとらないで、間接的に配列などで埋めているパターン?
https://github.com/google/ac-library.cr/blob/a5fe3c46c76497e26eabc08ee52bdc0aed45509e/atcoder/LazySegTree.cr#L40

その他のライブラリ

notさんによるGoogleスプレッドシートまとめ

Raise error if the number of constructor argument is zero

  • DSU
  • FenwickTree
  • MaxFlow
  • SCC
  • TwoSAT
  • Segtree

いくつかのデータ構造では、コンストラクタのサイズのデフォルト引数が0です。
しかし、動的にサイズが変化しない場合、サイズを0で作りたいケースは稀にもかかわらず、引数の書き漏れがあったときに気がつきにくいと思います。
引数がないときに、エラーにさせた方がいいのではないでしょうか

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.